Chapter overview

In this chapter, I focus on the second of my three key questions about the development of representations of mental life: How are the conceptual units that anchor representations of mental life organized in relation to each other, and how does this organization change over development? As in Chapter III, to address this question I draw on data from all of the current studies (Studies 1-4); for details about the methods of these studies, see Chapter II. The goal of this chapter is to provide “snapshots” of the organization of conceptual units in early childhood, middle childhood, and adulthood.

General analysis plan

High-level overview

My goal in this chapter is to examine the relationships among the “conceptual units” identified in Chapter III. How does a participant’s assessment of one conceptual unit for a particular target character (e.g., the degree to which he or she indicates that a beetle is capable of the physiological sensations of the BODY) affect that participant’s assessments of other conceptual units for that target character (e.g., his or her assessment of the beetle’s capaciteis in the domains of HEART or MIND)?

I focus in particular on the possibility that the mental capacity attributions documented by the studies included in this dissertation—re-analyzed as indicators of the broader “conceptual units” identified in Chapter III—might shed light on the hierarchical organization of these conceptual units, i.e., which conceptual units might be more basic or fundamental vs. more complex, and whether any of these conceptual units might or might not be considered to depend on the presence of others. In Chapter II, I illustrated this with the following example: If many participants endorse capacities associated with Conceptual Unit A without endorsing capacities associated with Conceptual Unit B, but very few participants do the reverse (endorsing capacities associated with Conceptual Unit B but not Conceptual Unit A), this provides some evidence that Conceptual Unit A is more basic or fundamental than Conceptual Unit B, or that Conceptual Unit B somehow depends on (perhaps requires) Conceptual Unit A.

Here I will translate this general interest in the relationships among conceptual units, as well as the specific intuition about how to detect the kinds of asymmetries that would be the signature of hierarchical relationships, into a specific analysis plan to be applied to each of these datasets in turn.

Details of analyses

Unlike the previous chapter, in which I employed a canonical approach to identifying latent constructs through analyses of correlation structures—exploratory factor analysis (EFA)—in this chapter there is no tried-and-true method for meeting my analysis goals. Instead, I chart my own course through these datasets, using the EFA solutions reported in Chapter II to score participants’ endorsements of each conceptual unit for the particular target character(s) that they assessed, examining visualizations of the complicated relationships among these endorsements, and then conducting more targeted statistical analyses of one particular aspect of these relationships: the possibility of asymmetries in the endorsements of these conceptual units.

Scoring endorsements of conceptual units

The first step in these analyses is to transform participants’ ratings of individual mental capacities into “scores” that indicate the extent to which they endorsed a particular conceptual unit for the target character(s) that they were assigned to assess. To do this, I make use of the EFAs presented in Chapter II—which originally served to identify a set of conceptual units in a particular sample—to a new end: the construction of “scales” for each of these conceptual units. Scale construction is a common use of EFA and similar dimensionality reduction analyses (if anything, more common than using EFA to make the kinds of theoretical arguments featured in Chapter II).

For each EFA solution, I construct a scale for each of the factors (conceptual units) identified by that solution. First, I sort each of the mental capacities included in that study into categories based on their loadings on each of the factors in that solution. For each mental capacity, I identify the “dominant” factor as the factor with the largest positive factor loading. For example, if the mental capacity feel happy had loadings of 0.60 on the BODY factor, 0.70 on the HEART factor, and 0.30 on the MIND factor, I would sort it into the HEART category. For each factor, I take the six highest-loading items as a candidate scale, then “drop” the capacities with the smallest factor loadings on their respective dominant factors until I have the same number of mental capacities in each category. For example, if the BODY factor were the dominant factor for nine mental capacities, the HEART factor for six mental capacities, and the MIND factor for five capacities, for each factor I would keep only the capacities with the five highest positive loadings on that factor, in order to construct three scales of equal length (and a maximum length of six items).

To calculate scores on these scales, I take the average of all of mental capacities for each scale. This yields a dataset in which each participant is associated with one score for each of the conceptual units identified in the relative EFA solution, for each of the target characters that that participant assessed.

In this chapter, I apply this method to all of the three-factor solutions for adult samples as presented in Chapter II (Studies 1-4), yielding BODY, HEART, and MIND scores for each target character as assessed by each participant. (I ignore the aberrant four-factor solution for adults in Study 2 suggested by one of the three factor retention protocols considered in that chapter, since this was the only study out of the seven considered in which a four-factor solution appeared to add any value beyond the robust BODY-HEART-MIND framework common to all studies. [XX APPENDIX B?])

For child samples, I apply this method both to the solutions emerging from children’s own data and to the corresponding adult solutions for the studies in question. This allows me to explore both the relationships among children’s own conceptual units, and the relationships among a fully adult-like set of conceptual units (presumably, the conceptual units that these children will eventually come to agree on as they mature into adults).

For “older” children (7-9y of age; Studies 2 and 3), this means examining two sets of three conceptual units for each sample of children: (1) BODY, HEART, and MIND as defined by adults in that study; and (2) BODY, HEART, and MIND as defined by the children themselves. Because the EFAs for older children and adults are so similar (see Chapter II), I expect the outcomes of these two approaches to constructing BODY, HEART, and MIND scales to yield very similar results in this age group.

For “younger” children, this means examining multiple sets of conceptual units for each sample of children, including (1) BODY, HEART, and MIND as defined by adults in that study; and (2) varying sets of 2-4 conceptual units as defined by EFA of children’s own responses, using different factor retention protocols. The EFAs of younger children’s responses were less reliable, and less adult-like, than those of older children. As a consequence, I expect the outcomes of these different approaches to constructing scales for each conceptual unit to yield rather different results in this age group.

The reader should note that this is far from the only way to approach “scoring” participants on these conceptual units. In particular, I could have examined factor scores—summaries of each factor (conceptual unit) based on a participant’s responses to all mental capacities and the relationships between all mental capacities and all factors included in that EFA solution—rather than constructing “scales” in the way I have just outlined. However, much like z-scores, factor scores indicate where a participant falls in relation to other participants in the sample, and do not provide the kind of absolute score that is key to my goal in this chapter, which is to analyze relationships among factors in terms of the extent to which individual participants indicated that target characters “possessed” the conceptual units BODY, HEART, and MIND. [XX APPENDIX B?]

Even within the “scale” approach described in this section, there are many parameters of this analysis that I could have set differently. For example, I could have considered absolute factor loadings rather than raw factor loadings, which would allow for mental capacities that loaded especially strongly negatively on a particular factor to contribute (negatively) to scores on that conceptual unit; I could have omitted the step of making the scales for all factors within a single EFA sotluion equal length; I could have chosen to use only the top 4 or 5 mental capacities across all EFA solutions, or to set no limit on the number of items in a scale; or I could have implemented absolute thresholds for how strongly a mental capacity must load on a factor in order to count toward the score for that conceptual unit, or absolute limits on the degree to which a mental capacity can “cross-load” on non-dominant factors and still count toward the score for any one conceptual unit. [XX APPENDIX B?] However, these kinds of details differ quite dramatically across studies and age groups. For example, in some samples there are no strong negative factor loadings, and in others there are; if I considered absolute loadings rather than raw loadings, I could end up comparing scores from a “bipolar” scale in one sample to scores from a “unipolar” scales in another sample, making the comparison more difficult to interpret. Likewise, some EFA solutions tended to feature generally weaker factor loadings than others; if I were to impose absolute thresholds for the strength of factor loadings, I could end up comparing scores from scales of wildly different lengths across samples. In my view, the analysis decisions outlined above maximize comparability across studies and age groups—the primary goal of this chapter. (Note, however, that in the analysis code for this chapter I have included easy short cuts for the interested reader to explore different options for each of these parameters.)

Visualizing relationships

XX

outline:

  • for any sample, I have identified relevant conceptual units (chapter II) and scored each participant’s endorsement of each of these units for their assigned target character(s) (previous section)
  • now, I want to assess the relationships among these endorsements
  • but I don’t really know what to expect, and these relationships could be very complex
  • so, start with holistic, exploratory visualization: scatterplots of pairs of conceptual units

Targeting the possibility of asymmetries

XX

outline:

  • now, a more targeted approach to one particular aspect of these relationships: asymmetries
  • reminder of basic intuition: in this sample, do participants tend to endorse A without B? B without A? is there an asymmetry here?
  • connect to the visualizations: asymmetries of points around the y=x line of equivalence
  • one way to boil this down to a number: difference scores (for each pair), comparisons to 0 via bayesian regressions
  • for any pair: if 0, no evidence for hierarchy. if non-zero, some evidence.
  • comparisons across pairs: further from 0, more hierarchical.
  • caveat 1: these are post-hoc analyses! but still using confirmatory stats.
  • caveat 2: scores of (0,0) treated same as scores of (6,6), or anywhere in between.

Study 1: An adult endpoint

In the context of this dissertation, Study 1 serves the role of describing a developmental endpoint for conceptual representations of mental life. In this chapter, I focus on what these studies can reveal about the relationships among the conceptual units discussed in Chapter III. These analyses were not part of the original publication of these studies (Weisman et al., 2017).

Special notes on data processing and analysis

As noted in Chapter II, in the original analysis of these datasets responses were recoded to run from -3 to +3 before analyses (Weisman et al., 2017); in this dissertation, I maintain the 0-6 coding for comparability to Studies 2-4.

Results

Study 1a

In Study 1a, 405 US adults each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II and Weisman et al., 2017, for detailed methods.)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.1.

Visualization

XX

Analysis of asymmetries

XX

Study 1b

Study 1b was a direct replication of Study 1a: 406 US adults each assessed a single target character (either a beetle or a robot) on 40 mental capacities. (See Chapter II and Weisman et al., 2017, for detailed methods.)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.1.

Visualization

XX

Analysis of asymmetries

XX

Study 1c

In Study 1c, 200 US adults each assessed two target characters on 40 mental capacities. Like Studies 1a and 1b, this study employed the “edge case” variant of the general approach; but in this study, all participants assessed both of these target characters side by side (with left-right position counterbalaned across participants). (See Chapter II and Weisman et al., 2017, for detailed methods.)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.1.

Visualization

XX

Analysis of asymmetries

XX

Study 1d

In Study 1d, 431 US adults each assessed a single target character on 40 mental capacities. Unlike Studies 1a-1c, this study employed the “many characters” variant of the general approach, in which participants were randomly assigned to assess one of the following 21 target characters: an adult, a child, an infant, a person in a persistent vegetative state, a fetus, a chimpanzee, an elephant, a dolphin, a bear, a dog, a goat, a mouse, a frog, a blue jay, a fish, a beetle, a microbe, a robot, a computer, a car, or a stapler. (See Chapter II and Weisman et al., 2017, for detailed methods.)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.1.

Visualization

XX

Analysis of asymmetries

XX

Discussion

XX

Table 4.1: Scales for each of the conceptual units (factors) identified by EFA for US Adults in Studies 1a-1d (see Chapter III). A checkmark indicates that a mental capacity was included in a scale for a particular study.
Capacity Study 1a Study 1b Study 1c Study 1d
BODY scale
getting hungry
experiencing pain
feeling tired
experiencing fear
experiencing pleasure
having free will
being conscious
having desires
feeling calm
HEART scale
feeling embarrassed
experiencing pride
feeling love
experiencing guilt
holding beliefs
feeling disrespected
feeling depressed
telling right from wrong
MIND scale
remembering things
recognizing someone
sensing temperatures
communicating with others
seeing things
perceiving depth
detecting sounds
working toward a goal
making choices

Study 2: Conceptual change between middle childhood (7-9y) and adulthood

In Study 2, 200 US adults and 200 US children between the ages of 7.01-9.99 years (median: 8.31y) each assessed a single target character on 40 mental capacities. To make the study appropriate for children in this age range, the wording of some the 40 mental capacities employed in Study 1 was modified to use more age-appropriate vocabulary, and participants responded on a 3-point scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

Results

Adults

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.2.

Visualization

Analysis of asymmetries

XX

Children (7-9y)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.2.

Visualization

Using adults’ scales

XX

Using children’s own scales

XX

Analysis of asymmetries

Using adults’ scales

XX

Developmental comparison

XX

Using children’s own scales

XX

Discussion

XX

Table 4.2: Scales for each of the conceptual units (factors) identified by EFA for US Adults and children in Study 2 (see Chapter III). A checkmark indicates that a mental capacity was included in a scale for a particular sample.
Capacity Adults Children, 7-9y
BODY scale
get hungry
feel pain
feel scared
feel tired
feel safe
smell things
feel sick...
HEART scale
feel proud
feel joy
feel sad
feel happy
feel love
feel guilty
get hurt feelings
MIND scale
figure out how to do things
make choices
recognize somebody else
sense...far away
remember things
see things
be aware of itself
be aware of things
sense temperatures

Study 3: Conceptual change over early and middle childhood (4-9y)

In Study 3, 116 US adults, 125 “older” children (7.08-9.98 years; median: 8.56y), and 124 “younger” children (4-6.98 years; median: 5.03y) each assessed a single target character on 20 mental capacities. To make the study appropriate for children in this age range, participants assessed a subset of the 40 mental capacities employed in Study 2, chosen to represent the three “conceptual units” revealed by Studies 1-2 (BODY, HEART, and MIND) and to cover a similar range of mental capacities as Studies 1-2. As in Study 2, participants responded on a 3-point scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “diverse characters” variant of the general approach, with participants randomly or pseudo-randomly assigned to assess either one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. (See Chapter II for detailed methods.)

Special notes on data processing and analysis

Results

Adults

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.3.

Visualization

XX

Analysis of asymmetries

XX

Children (7-9y)

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.3.

Visualization

Using adults’ scales

XX

Using children’s own scales

XX

Analysis of asymmetries

Using adults’ scales

XX

Using children’s own scales

XX

Children (4-6y)

Scale construction

Three-factor solution

Following the steps described in “General analysis plan,” above, yielded BODY*, HEART*, and MIND scales of 5 items each; see Table 4.3.

Two-factor solution

Following the steps described in “General analysis plan,” above, yielded BODY-HEART and MIND scales of 6 items each; see Table 4.3.

Visualization

Using adults’ scales

XX

Using children’s own scales (three-factor solution)

XX

Using children’s own scales (three-factor solution)

XX

Analysis of asymmetries

Using adults’ scales

XX

Developmental comparison
Using children’s own scales (three-factor solution)

XX

Using children’s own scales (two-factor solution)

XX

Discussion

XX

Table 4.3: Scales for each of the conceptual units (factors) identified by EFA for US Adults, older children, and younger children in Study 3 (see Chapter III). For younger children, this includes scales for both three- and two-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children differed substantially from those of older children and adults, such that some mental capacities were included in different scales across age groups (e.g., feel scared was part of the BODY scale for older children and adults, but part of the HEART* scale for younger children). In these cases, the name of the scale is provided (rather than a checkmark).
Younger children, 4-6y
Capacity Adults Older children, 7-9y 3-factor solution 2-factor solution
BODY scale
feel pain
get hungry BODY-HEART
feel tired
smell things
feel scared HEART*
feel sick... BODY-HEART
get angry BODY-HEART
HEART scale
feel happy BODY-HEART
feel guilty MIND MIND
get hurt feelings BODY*
feel embarrassed
feel proud BODY-HEART
feel love
feel sad BODY-HEART
MIND scale
sense...far away
sense temperatures
figure out how to do things
be aware of things
remember things
make choices

Study 4: A focus on early childhood (4-5y)

In Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59 years (median: 4.73y) each assessed two target characters on 18 mental capacities. To make the study appropriate for children in this age range, this study employed a new set of 18 mental capacities (some but not all of which were used in Studies 1-3). In addition, participants were presented with a more child-friendly visual representation of the 3-point response scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)

Special notes on data processing and analysis

Results

Adults

Scale construction

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 5 items each; see Table 4.4.

Visualization

XX

Analysis of asymmetries

XX

Children (4-5y)

Scale construction

Three-factor solution

Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 3 items each; see Table 4.4.

Four-factor solution

Following the steps described in “General analysis plan,” above, yielded BODY (nausea), BODY (other), HEART*, and MIND* scales of 3 items each; see Table 4.4.

Visualization

Using adults’ scales

XX

Using children’s own scales (three-factor solution)

XX

Using children’s own scales (four-factor solution)

XX

Analysis of asymmetries

Using adults’ scales

XX

Using children’s own scales (three-factor solution)

XX

Using children’s own scales (four-factor solution)

XX

Discussion

XX

Table 4.4: Scales for each of the conceptual units (factors) identified by EFA for US Adults and children in Study 4 (see Chapter III). For children, this includes scales for both three- and four-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children differed substantially from those of adults, such that some mental capacities were included in different scales across age groups (e.g., love someone was part of the HEART scale for adults, but part of the MIND* scale in the four-factor solution for younger children). In these cases, the name of the scale is provided (rather than a checkmark).
Children, 4-5y
Capacity Adults 3-factor solution 4-factor solution
BODY scale
get thirsty BODY (other)
feel hungry BODY (other)
smell things BODY (nausea)
feel tired BODY (nausea)
feel sick BODY (nausea)
HEART scale
love someone MIND*
get sad
hate someone
feel sorry
get lonely
MIND scale
figure things out
remember things
know stuff
think
hear BODY (other)

General discussion

XX

Chapter conclusion

In this chapter, I explored a second aspect of conceptual representations of mental life among US children and adults: The relationships among conceptual units. Studies 2-4 are consistent with the following theory: XX.

As in Chapter III, I urge the reader to remember that this is not the only possible interpretation of the pattern of results presented here; additional studies—in particular, studies designed to test the hypothesis that XX— could provide converging evidence or could challenge this theoretical interpretation. Instead, the primary role of the re-analysis discussed here has been to inspire the hypothesis stated in the previous paragraph and to the foundation for future tests of this hypothesis, in turn refining a general theory of this aspect of conceptual development.

In the next chapter, I apply the same exploratory spirit to the third and final aspect of conceptual representations of mental life: the application or deployment of these conceptual units in reasoning about various kinds of beings.

LS0tCnRpdGxlOiAiQ2hhcHRlciBJVjogQ2hhbmdlcyBpbiBvcmdhbml6YXRpb24gb2YgY29uY2VwdHVhbCB1bml0cyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNjcsCiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gRiwgZWNobyA9IEYpCmBgYAoKYGBge3J9CiMgIyBmb3Iga25pdHRpbmcgdG8gLmRvY3gKIyBvdXRwdXQ6CiMgICB3b3JkX2RvY3VtZW50OgojICAgICByZWZlcmVuY2VfZG9jeDogIi4vd29yZC1zdHlsZXMtcmVmZXJlbmNlLmRvY3giCiMgYWx3YXlzX2FsbG93X2h0bWw6IHllcwoKIyAjIGZvciBrbml0dGluZyB0byAubmIuaHRtbCAKIyBvdXRwdXQ6CiMgICBodG1sX25vdGVib29rOgojICAgICB0b2M6IHllcwojICAgICB0b2NfZGVwdGg6IDQKIyAgICAgdG9jX2Zsb2F0OiB5ZXMKYGBgCgpgYGB7cn0KIyBydW4gdXItc2V0dXAgc2NyaXB0ICh3aGljaCBydW5zIG90aGVyIHNjcmlwdHMpCnNvdXJjZSgiLi9zY3JpcHRzL19TRVRVUC5SIikKYGBgCgpgYGB7cn0KIyBsb2FkIGluIEVGQXMgZnJvbSBDaGFwdGVyIElJSQojIHN0dWR5IDEKZWZhX3Bhcl9kMWFfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2QxYV9hZCIpCmVmYV9iaWNfZDFhX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kMWFfYWQiKQplZmFfd2RtX2QxYV9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDFhX2FkIikKCmVmYV9wYXJfZDFiX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kMWJfYWQiKQplZmFfYmljX2QxYl9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDFiX2FkIikKZWZhX3dkbV9kMWJfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QxYl9hZCIpCgplZmFfcGFyX2QxY19hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDFjX2FkIikKZWZhX2JpY19kMWNfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QxY19hZCIpCmVmYV93ZG1fZDFjX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3dkbV9kMWNfYWQiKQoKZWZhX3Bhcl9kMWRfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2QxZF9hZCIpCmVmYV9iaWNfZDFkX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kMWRfYWQiKQplZmFfd2RtX2QxZF9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDFkX2FkIikKCiMgc3R1ZHkgMgplZmFfcGFyX2QyX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kMl9hZCIpCmVmYV9iaWNfZDJfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QyX2FkIikKZWZhX3dkbV9kMl9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDJfYWQiKQoKZWZhX3Bhcl9kMl83OSA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDJfNzkiKQplZmFfYmljX2QyXzc5IDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kMl83OSIpCmVmYV93ZG1fZDJfNzkgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QyXzc5IikKCiMgc3R1ZHkgMwplZmFfcGFyX2QzX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kM19hZCIpCmVmYV9iaWNfZDNfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QzX2FkIikKZWZhX3dkbV9kM19hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDNfYWQiKQoKZWZhX3Bhcl9kM183OSA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDNfNzkiKQplZmFfYmljX2QzXzc5IDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kM183OSIpCmVmYV93ZG1fZDNfNzkgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QzXzc5IikKCmVmYV9wYXJfZDNfNDYgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2QzXzQ2IikKZWZhX2JpY19kM180NiA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDNfNDYiKQplZmFfd2RtX2QzXzQ2IDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3dkbV9kM180NiIpCgojIHN0dWR5IDQKZWZhX3Bhcl9kNF9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDRfYWQiKQplZmFfYmljX2Q0X2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kNF9hZCIpCmVmYV93ZG1fZDRfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2Q0X2FkIikKCmVmYV9wYXJfZDRfNDYgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2Q0XzQ2IikKZWZhX2JpY19kNF80NiA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDRfNDYiKQplZmFfd2RtX2Q0XzQ2IDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3dkbV9kNF80NiIpCgojIGxvYWQgaW4gZmFjdG9yIG5hbWVzIGZyb20gQ2hhcHRlciBJSUkKIyBzdHVkeSAxCmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYV9hZCA8LSByZWFkUkRTKCAKICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYV9hZCIpCmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYl9hZCA8LSByZWFkUkRTKCAKICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYl9hZCIpCmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxY19hZCA8LSByZWFkUkRTKCAKICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxY19hZCIpCmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxZF9hZCA8LSByZWFkUkRTKCAKICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxZF9hZCIpCgojIHN0dWR5IDIKZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfYWQgPC0gcmVhZFJEUyggCiAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZCIpCmZhY3Rvcl9uYW1lc19lZmFfcGFyX2QyX2FkIDwtIHJlYWRSRFMoIAogIGZpbGUgPSAiLi9mYWN0b3JfbmFtZXMvZmFjdG9yX25hbWVzX2VmYV9wYXJfZDJfYWQiKQpmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl83OSA8LSByZWFkUkRTKCAKICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyXzc5IikKCiMgc3R1ZHkgMwpmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCA8LSByZWFkUkRTKCAKICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzX2FkIikKZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkgPC0gcmVhZFJEUyggCiAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kM183OSIpCmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzQ2IDwtIHJlYWRSRFMoIAogIGZpbGUgPSAiLi9mYWN0b3JfbmFtZXMvZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYiKQpmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NiA8LSByZWFkUkRTKCAKICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfcGFyX2QzXzQ2IikKCiMgc3R1ZHkgNApmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCA8LSByZWFkUkRTKCAKICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0X2FkIikKZmFjdG9yX25hbWVzX2VmYV9wYXJfZDRfNDYgPC0gcmVhZFJEUyggCiAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3Bhcl9kNF80NiIpCmZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2IDwtIHJlYWRSRFMoIAogIGZpbGUgPSAiLi9mYWN0b3JfbmFtZXMvZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfNDYiKQpgYGAKCmBgYHtyfQojIGNvbG9ycyBmb3IgcGxvdHRpbmcgdGFyZ2V0IGNoYXJhY3RlcnMKY29sb3JzMDIgPC0gYygiI2U0MWExYyIsICIjMzc3ZWI4IikKY29sb3JzMDkgPC0gY29sb3JSYW1wUGFsZXR0ZShjKCIjZTMxYTFjIiwgIiNmZjdmMDAiLCAiIzMzYTAyYyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMxZjc4YjQiLCAiIzZhM2Q5YSIpLCAjIGZyb20gY29sb3JicmV3ZXIyLm9yZyAiUGFpcmVkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlID0gIkxhYiIpKDkpCmNvbG9yczIxIDwtIGNvbG9yUmFtcFBhbGV0dGUoYygiI2UzMWExYyIsICIjZmY3ZjAwIiwgIiMzM2EwMmMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMWY3OGI0IiwgIiM2YTNkOWEiKSwgIyBmcm9tIGNvbG9yYnJld2VyMi5vcmcgIlBhaXJlZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSA9ICJMYWIiKSgyMSkKYGBgCgpgYGB7cn0KIyBjb250cmFzdHMgZm9yIHJlZ3Jlc3Npb25zCgojIHRhcmdldCBjaGFyYWN0ZXI6IDIgZWRnZSBjYXNlcwpjb250cmFzdHNfc3VtX2VkZ2UgPC0gY2JpbmQoIl9yb2JvdF9HTSIgPSBjKC0xLCAxKSkKY29udHJhc3RzX3RydF9lZGdlIDwtIGNiaW5kKCJfcm9ib3QiID0gYygwLCAxKSkKCiMgdGFyZ2V0IGNoYXJhY3RlcjogMjEgZGl2ZXJzZSBjaGFyYWN0ZXJzCmNvbnRyYXN0c19zdW1fZHYyMSA8LSBjb250ci5zdW0oMjEpCmNvbnRyYXN0c190cnRfZHYyMSA8LSBjb250ci50cmVhdG1lbnQoMjEpCgojIHRhcmdldCBjaGFyYWN0ZXI6IDkgZGl2ZXJzZSBjaGFyYWN0ZXJzCmNvbnRyYXN0c19zdW1fZHYwOSA8LSBjb250ci5zdW0oOSkKY29udHJhc3RzX3RydF9kdjA5IDwtIGNvbnRyLnRyZWF0bWVudCg5KQoKCiMgYWdlIGdyb3VwOiAyIGFnZSBncm91cHMKY29udHJhc3RzX3N1bTJfYWdlZ3AgPC0gY2JpbmQoIl9jaGlsZF9HTSIgPSBjKC0xLCAxKSkKY29udHJhc3RzX2R1bTJfYWdlZ3AgPC0gY2JpbmQoIl9jaGlsZCIgPSBjKDAsIDEpKQoKIyBhZ2UgZ3JvdXA6IDIgYWdlIGdyb3Vwcwpjb250cmFzdHNfc3VtM19hZ2VncCA8LSBjYmluZCgiX29sZF9HTSIgPSBjKC0xLCAwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl95bmdfR00iID0gYygtMSwgMSwgMCkpCmNvbnRyYXN0c19kdW0zX2FnZWdwIDwtIGNiaW5kKCJfb2xkIiA9IGMoMCwgMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfeW5nIiA9IGMoMCwgMSwgMCkpCmBgYAoKCiMgQ2hhcHRlciBvdmVydmlldwoKSW4gdGhpcyBjaGFwdGVyLCBJIGZvY3VzIG9uIHRoZSBzZWNvbmQgb2YgbXkgdGhyZWUga2V5IHF1ZXN0aW9ucyBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlOiBfSG93IGFyZSB0aGUgY29uY2VwdHVhbCB1bml0cyB0aGF0IGFuY2hvciByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgb3JnYW5pemVkIGluIHJlbGF0aW9uIHRvIGVhY2ggb3RoZXIsIGFuZCBob3cgZG9lcyB0aGlzIG9yZ2FuaXphdGlvbiBjaGFuZ2Ugb3ZlciBkZXZlbG9wbWVudD9fIEFzIGluIENoYXB0ZXIgSUlJLCB0byBhZGRyZXNzIHRoaXMgcXVlc3Rpb24gSSBkcmF3IG9uIGRhdGEgZnJvbSBhbGwgb2YgdGhlIGN1cnJlbnQgc3R1ZGllcyAoU3R1ZGllcyAxLTQpOyBmb3IgZGV0YWlscyBhYm91dCB0aGUgbWV0aG9kcyBvZiB0aGVzZSBzdHVkaWVzLCBzZWUgQ2hhcHRlciBJSS4gVGhlIGdvYWwgb2YgdGhpcyBjaGFwdGVyIGlzIHRvIHByb3ZpZGUgInNuYXBzaG90cyIgb2YgdGhlIG9yZ2FuaXphdGlvbiBvZiBjb25jZXB0dWFsIHVuaXRzIGluIGVhcmx5IGNoaWxkaG9vZCwgbWlkZGxlIGNoaWxkaG9vZCwgYW5kIGFkdWx0aG9vZC4KCgojIEdlbmVyYWwgYW5hbHlzaXMgcGxhbgoKIyMgSGlnaC1sZXZlbCBvdmVydmlldwoKTXkgZ29hbCBpbiB0aGlzIGNoYXB0ZXIgaXMgdG8gZXhhbWluZSB0aGUgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgImNvbmNlcHR1YWwgdW5pdHMiIGlkZW50aWZpZWQgaW4gQ2hhcHRlciBJSUkuIEhvdyBkb2VzIGEgcGFydGljaXBhbnQncyBhc3Nlc3NtZW50IG9mIG9uZSBjb25jZXB0dWFsIHVuaXQgZm9yIGEgcGFydGljdWxhciB0YXJnZXQgY2hhcmFjdGVyIChlLmcuLCB0aGUgZGVncmVlIHRvIHdoaWNoIGhlIG9yIHNoZSBpbmRpY2F0ZXMgdGhhdCBhIGJlZXRsZSBpcyBjYXBhYmxlIG9mIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgb2YgdGhlIEJPRFkpIGFmZmVjdCB0aGF0IHBhcnRpY2lwYW50J3MgYXNzZXNzbWVudHMgb2Ygb3RoZXIgY29uY2VwdHVhbCB1bml0cyBmb3IgdGhhdCB0YXJnZXQgY2hhcmFjdGVyIChlLmcuLCBoaXMgb3IgaGVyIGFzc2Vzc21lbnQgb2YgdGhlIGJlZXRsZSdzIGNhcGFjaXRlaXMgaW4gdGhlIGRvbWFpbnMgb2YgSEVBUlQgb3IgTUlORCk/CgpJIGZvY3VzIGluIHBhcnRpY3VsYXIgb24gdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgZG9jdW1lbnRlZCBieSB0aGUgc3R1ZGllcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3NlcnRhdGlvbuKAlHJlLWFuYWx5emVkIGFzIGluZGljYXRvcnMgb2YgdGhlIGJyb2FkZXIgImNvbmNlcHR1YWwgdW5pdHMiIGlkZW50aWZpZWQgaW4gQ2hhcHRlciBJSUnigJRtaWdodCBzaGVkIGxpZ2h0IG9uIHRoZSBfaGllcmFyY2hpY2FsIG9yZ2FuaXphdGlvbl8gb2YgdGhlc2UgY29uY2VwdHVhbCB1bml0cywgaS5lLiwgd2hpY2ggY29uY2VwdHVhbCB1bml0cyBtaWdodCBiZSBtb3JlIGJhc2ljIG9yIGZ1bmRhbWVudGFsIHZzLiBtb3JlIGNvbXBsZXgsIGFuZCB3aGV0aGVyIGFueSBvZiB0aGVzZSBjb25jZXB0dWFsIHVuaXRzIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBjb25zaWRlcmVkIHRvIGRlcGVuZCBvbiB0aGUgcHJlc2VuY2Ugb2Ygb3RoZXJzLiBJbiBDaGFwdGVyIElJLCBJIGlsbHVzdHJhdGVkIHRoaXMgd2l0aCB0aGUgZm9sbG93aW5nIGV4YW1wbGU6IElmIG1hbnkgcGFydGljaXBhbnRzIGVuZG9yc2UgY2FwYWNpdGllcyBhc3NvY2lhdGVkIHdpdGggQ29uY2VwdHVhbCBVbml0IEEgd2l0aG91dCBlbmRvcnNpbmcgY2FwYWNpdGllcyBhc3NvY2lhdGVkIHdpdGggQ29uY2VwdHVhbCBVbml0IEIsIGJ1dCB2ZXJ5IGZldyBwYXJ0aWNpcGFudHMgZG8gdGhlIHJldmVyc2UgKGVuZG9yc2luZyBjYXBhY2l0aWVzIGFzc29jaWF0ZWQgd2l0aCBDb25jZXB0dWFsIFVuaXQgQiBidXQgbm90IENvbmNlcHR1YWwgVW5pdCBBKSwgdGhpcyBwcm92aWRlcyBzb21lIGV2aWRlbmNlIHRoYXQgQ29uY2VwdHVhbCBVbml0IEEgaXMgbW9yZSBiYXNpYyBvciBmdW5kYW1lbnRhbCB0aGFuIENvbmNlcHR1YWwgVW5pdCBCLCBvciB0aGF0IENvbmNlcHR1YWwgVW5pdCBCIHNvbWVob3cgZGVwZW5kcyBvbiAocGVyaGFwcyByZXF1aXJlcykgQ29uY2VwdHVhbCBVbml0IEEuIAoKSGVyZSBJIHdpbGwgdHJhbnNsYXRlIHRoaXMgZ2VuZXJhbCBpbnRlcmVzdCBpbiB0aGUgcmVsYXRpb25zaGlwcyBhbW9uZyBjb25jZXB0dWFsIHVuaXRzLCBhcyB3ZWxsIGFzIHRoZSBzcGVjaWZpYyBpbnR1aXRpb24gYWJvdXQgaG93IHRvIGRldGVjdCB0aGUga2luZHMgb2YgYXN5bW1ldHJpZXMgdGhhdCB3b3VsZCBiZSB0aGUgc2lnbmF0dXJlIG9mIGhpZXJhcmNoaWNhbCByZWxhdGlvbnNoaXBzLCBpbnRvIGEgc3BlY2lmaWMgYW5hbHlzaXMgcGxhbiB0byBiZSBhcHBsaWVkIHRvIGVhY2ggb2YgdGhlc2UgZGF0YXNldHMgaW4gdHVybi4gCgojIyBEZXRhaWxzIG9mIGFuYWx5c2VzCgpVbmxpa2UgdGhlIHByZXZpb3VzIGNoYXB0ZXIsIGluIHdoaWNoIEkgZW1wbG95ZWQgYSBjYW5vbmljYWwgYXBwcm9hY2ggdG8gaWRlbnRpZnlpbmcgbGF0ZW50IGNvbnN0cnVjdHMgdGhyb3VnaCBhbmFseXNlcyBvZiBjb3JyZWxhdGlvbiBzdHJ1Y3R1cmVz4oCUZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzIChFRkEp4oCUaW4gdGhpcyBjaGFwdGVyIHRoZXJlIGlzIG5vIHRyaWVkLWFuZC10cnVlIG1ldGhvZCBmb3IgbWVldGluZyBteSBhbmFseXNpcyBnb2Fscy4gSW5zdGVhZCwgSSBjaGFydCBteSBvd24gY291cnNlIHRocm91Z2ggdGhlc2UgZGF0YXNldHMsIHVzaW5nIHRoZSBFRkEgc29sdXRpb25zIHJlcG9ydGVkIGluIENoYXB0ZXIgSUkgdG8gc2NvcmUgcGFydGljaXBhbnRzJyBlbmRvcnNlbWVudHMgb2YgZWFjaCBjb25jZXB0dWFsIHVuaXQgZm9yIHRoZSBwYXJ0aWN1bGFyIHRhcmdldCBjaGFyYWN0ZXIocykgdGhhdCB0aGV5IGFzc2Vzc2VkLCBleGFtaW5pbmcgdmlzdWFsaXphdGlvbnMgb2YgdGhlIGNvbXBsaWNhdGVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlc2UgZW5kb3JzZW1lbnRzLCBhbmQgdGhlbiBjb25kdWN0aW5nIG1vcmUgdGFyZ2V0ZWQgc3RhdGlzdGljYWwgYW5hbHlzZXMgb2Ygb25lIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZXNlIHJlbGF0aW9uc2hpcHM6IHRoZSBwb3NzaWJpbGl0eSBvZiBhc3ltbWV0cmllcyBpbiB0aGUgZW5kb3JzZW1lbnRzIG9mIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHMuCgojIyMgU2NvcmluZyBlbmRvcnNlbWVudHMgb2YgY29uY2VwdHVhbCB1bml0cwoKVGhlIGZpcnN0IHN0ZXAgaW4gdGhlc2UgYW5hbHlzZXMgaXMgdG8gdHJhbnNmb3JtIHBhcnRpY2lwYW50cycgcmF0aW5ncyBvZiBpbmRpdmlkdWFsIG1lbnRhbCBjYXBhY2l0aWVzIGludG8gInNjb3JlcyIgdGhhdCBpbmRpY2F0ZSB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoZXkgZW5kb3JzZWQgYSBwYXJ0aWN1bGFyIGNvbmNlcHR1YWwgdW5pdCBmb3IgdGhlIHRhcmdldCBjaGFyYWN0ZXIocykgdGhhdCB0aGV5IHdlcmUgYXNzaWduZWQgdG8gYXNzZXNzLiBUbyBkbyB0aGlzLCBJIG1ha2UgdXNlIG9mIHRoZSBFRkFzIHByZXNlbnRlZCBpbiBDaGFwdGVyIElJ4oCUd2hpY2ggb3JpZ2luYWxseSBzZXJ2ZWQgdG8gaWRlbnRpZnkgYSBzZXQgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBhIHBhcnRpY3VsYXIgc2FtcGxl4oCUdG8gYSBuZXcgZW5kOiB0aGUgY29uc3RydWN0aW9uIG9mICJzY2FsZXMiIGZvciBlYWNoIG9mIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHMuIFNjYWxlIGNvbnN0cnVjdGlvbiBpcyBhIGNvbW1vbiB1c2Ugb2YgRUZBIGFuZCBzaW1pbGFyIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiBhbmFseXNlcyAoaWYgYW55dGhpbmcsIG1vcmUgY29tbW9uIHRoYW4gdXNpbmcgRUZBIHRvIG1ha2UgdGhlIGtpbmRzIG9mIHRoZW9yZXRpY2FsIGFyZ3VtZW50cyBmZWF0dXJlZCBpbiBDaGFwdGVyIElJKS4KCkZvciBlYWNoIEVGQSBzb2x1dGlvbiwgSSBjb25zdHJ1Y3QgYSBzY2FsZSBmb3IgZWFjaCBvZiB0aGUgZmFjdG9ycyAoY29uY2VwdHVhbCB1bml0cykgaWRlbnRpZmllZCBieSB0aGF0IHNvbHV0aW9uLiBGaXJzdCwgSSBzb3J0IGVhY2ggb2YgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoYXQgc3R1ZHkgaW50byBjYXRlZ29yaWVzIGJhc2VkIG9uIHRoZWlyIGxvYWRpbmdzIG9uIGVhY2ggb2YgdGhlIGZhY3RvcnMgaW4gdGhhdCBzb2x1dGlvbi4gRm9yIGVhY2ggbWVudGFsIGNhcGFjaXR5LCBJIGlkZW50aWZ5IHRoZSAiZG9taW5hbnQiIGZhY3RvciBhcyB0aGUgZmFjdG9yIHdpdGggdGhlIGxhcmdlc3QgcG9zaXRpdmUgZmFjdG9yIGxvYWRpbmcuIEZvciBleGFtcGxlLCBpZiB0aGUgbWVudGFsIGNhcGFjaXR5IF9mZWVsIGhhcHB5XyBoYWQgbG9hZGluZ3Mgb2YgMC42MCBvbiB0aGUgQk9EWSBmYWN0b3IsIDAuNzAgb24gdGhlIEhFQVJUIGZhY3RvciwgYW5kIDAuMzAgb24gdGhlIE1JTkQgZmFjdG9yLCBJIHdvdWxkIHNvcnQgaXQgaW50byB0aGUgSEVBUlQgY2F0ZWdvcnkuIEZvciBlYWNoIGZhY3RvciwgSSB0YWtlIHRoZSBzaXggaGlnaGVzdC1sb2FkaW5nIGl0ZW1zIGFzIGEgY2FuZGlkYXRlIHNjYWxlLCB0aGVuICJkcm9wIiB0aGUgY2FwYWNpdGllcyB3aXRoIHRoZSBzbWFsbGVzdCBmYWN0b3IgbG9hZGluZ3Mgb24gdGhlaXIgcmVzcGVjdGl2ZSBkb21pbmFudCBmYWN0b3JzIHVudGlsIEkgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgbWVudGFsIGNhcGFjaXRpZXMgaW4gZWFjaCBjYXRlZ29yeS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBCT0RZIGZhY3RvciB3ZXJlIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIG5pbmUgbWVudGFsIGNhcGFjaXRpZXMsIHRoZSBIRUFSVCBmYWN0b3IgZm9yIHNpeCBtZW50YWwgY2FwYWNpdGllcywgYW5kIHRoZSBNSU5EIGZhY3RvciBmb3IgZml2ZSBjYXBhY2l0aWVzLCBmb3IgZWFjaCBmYWN0b3IgSSB3b3VsZCBrZWVwIG9ubHkgdGhlIGNhcGFjaXRpZXMgd2l0aCB0aGUgZml2ZSBoaWdoZXN0IHBvc2l0aXZlIGxvYWRpbmdzIG9uIHRoYXQgZmFjdG9yLCBpbiBvcmRlciB0byBjb25zdHJ1Y3QgdGhyZWUgc2NhbGVzIG9mIGVxdWFsIGxlbmd0aCAoYW5kIGEgbWF4aW11bSBsZW5ndGggb2Ygc2l4IGl0ZW1zKS4KClRvIGNhbGN1bGF0ZSBzY29yZXMgb24gdGhlc2Ugc2NhbGVzLCBJIHRha2UgdGhlIGF2ZXJhZ2Ugb2YgYWxsIG9mIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBlYWNoIHNjYWxlLiBUaGlzIHlpZWxkcyBhIGRhdGFzZXQgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudCBpcyBhc3NvY2lhdGVkIHdpdGggb25lIHNjb3JlIGZvciBlYWNoIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzIGlkZW50aWZpZWQgaW4gdGhlIHJlbGF0aXZlIEVGQSBzb2x1dGlvbiwgZm9yIGVhY2ggb2YgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIHRoYXQgdGhhdCBwYXJ0aWNpcGFudCBhc3Nlc3NlZC4KCkluIHRoaXMgY2hhcHRlciwgSSBhcHBseSB0aGlzIG1ldGhvZCB0byBhbGwgb2YgdGhlIHRocmVlLWZhY3RvciBzb2x1dGlvbnMgZm9yIGFkdWx0IHNhbXBsZXMgYXMgcHJlc2VudGVkIGluIENoYXB0ZXIgSUkgKFN0dWRpZXMgMS00KSwgeWllbGRpbmcgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjb3JlcyBmb3IgZWFjaCB0YXJnZXQgY2hhcmFjdGVyIGFzIGFzc2Vzc2VkIGJ5IGVhY2ggcGFydGljaXBhbnQuIChJIGlnbm9yZSB0aGUgYWJlcnJhbnQgZm91ci1mYWN0b3Igc29sdXRpb24gZm9yIGFkdWx0cyBpbiBTdHVkeSAyIHN1Z2dlc3RlZCBieSBvbmUgb2YgdGhlIHRocmVlIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzIGNvbnNpZGVyZWQgaW4gdGhhdCBjaGFwdGVyLCBzaW5jZSB0aGlzIHdhcyB0aGUgb25seSBzdHVkeSBvdXQgb2YgdGhlIHNldmVuIGNvbnNpZGVyZWQgaW4gd2hpY2ggYSBmb3VyLWZhY3RvciBzb2x1dGlvbiBhcHBlYXJlZCB0byBhZGQgYW55IHZhbHVlIGJleW9uZCB0aGUgcm9idXN0IEJPRFktSEVBUlQtTUlORCBmcmFtZXdvcmsgY29tbW9uIHRvIGFsbCBzdHVkaWVzLiBbWFggQVBQRU5ESVggQj9dKQoKRm9yIGNoaWxkIHNhbXBsZXMsIEkgYXBwbHkgdGhpcyBtZXRob2QgYm90aCB0byB0aGUgc29sdXRpb25zIGVtZXJnaW5nIGZyb20gY2hpbGRyZW4ncyBvd24gZGF0YSBhbmQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgX2FkdWx0XyBzb2x1dGlvbnMgZm9yIHRoZSBzdHVkaWVzIGluIHF1ZXN0aW9uLiBUaGlzIGFsbG93cyBtZSB0byBleHBsb3JlIGJvdGggdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgY2hpbGRyZW4ncyBvd24gY29uY2VwdHVhbCB1bml0cywgYW5kIHRoZSByZWxhdGlvbnNoaXBzIGFtb25nIGEgZnVsbHkgYWR1bHQtbGlrZSBzZXQgb2YgY29uY2VwdHVhbCB1bml0cyAocHJlc3VtYWJseSwgdGhlIGNvbmNlcHR1YWwgdW5pdHMgdGhhdCB0aGVzZSBjaGlsZHJlbiB3aWxsIGV2ZW50dWFsbHkgY29tZSB0byBhZ3JlZSBvbiBhcyB0aGV5IG1hdHVyZSBpbnRvIGFkdWx0cykuIAoKRm9yICJvbGRlciIgY2hpbGRyZW4gKDctOXkgb2YgYWdlOyBTdHVkaWVzIDIgYW5kIDMpLCB0aGlzIG1lYW5zIGV4YW1pbmluZyB0d28gc2V0cyBvZiB0aHJlZSBjb25jZXB0dWFsIHVuaXRzIGZvciBlYWNoIHNhbXBsZSBvZiBjaGlsZHJlbjogKDEpIEJPRFksIEhFQVJULCBhbmQgTUlORCBhcyBkZWZpbmVkIGJ5IGFkdWx0cyBpbiB0aGF0IHN0dWR5OyBhbmQgKDIpIEJPRFksIEhFQVJULCBhbmQgTUlORCBhcyBkZWZpbmVkIGJ5IHRoZSBjaGlsZHJlbiB0aGVtc2VsdmVzLiBCZWNhdXNlIHRoZSBFRkFzIGZvciBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzIGFyZSBzbyBzaW1pbGFyIChzZWUgQ2hhcHRlciBJSSksIEkgZXhwZWN0IHRoZSBvdXRjb21lcyBvZiB0aGVzZSB0d28gYXBwcm9hY2hlcyB0byBjb25zdHJ1Y3RpbmcgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyB0byB5aWVsZCB2ZXJ5IHNpbWlsYXIgcmVzdWx0cyBpbiB0aGlzIGFnZSBncm91cC4KCkZvciAieW91bmdlciIgY2hpbGRyZW4sIHRoaXMgbWVhbnMgZXhhbWluaW5nIG11bHRpcGxlIHNldHMgb2YgY29uY2VwdHVhbCB1bml0cyBmb3IgZWFjaCBzYW1wbGUgb2YgY2hpbGRyZW4sIGluY2x1ZGluZyAoMSkgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFzIGRlZmluZWQgYnkgYWR1bHRzIGluIHRoYXQgc3R1ZHk7IGFuZCAoMikgdmFyeWluZyBzZXRzIG9mIDItNCBjb25jZXB0dWFsIHVuaXRzIGFzIGRlZmluZWQgYnkgRUZBIG9mIGNoaWxkcmVuJ3Mgb3duIHJlc3BvbnNlcywgdXNpbmcgZGlmZmVyZW50IGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzLiBUaGUgRUZBcyBvZiB5b3VuZ2VyIGNoaWxkcmVuJ3MgcmVzcG9uc2VzICB3ZXJlIGxlc3MgcmVsaWFibGUsIGFuZCBsZXNzIGFkdWx0LWxpa2UsIHRoYW4gdGhvc2Ugb2Ygb2xkZXIgY2hpbGRyZW4uIEFzIGEgY29uc2VxdWVuY2UsIEkgZXhwZWN0IHRoZSBvdXRjb21lcyBvZiB0aGVzZSBkaWZmZXJlbnQgYXBwcm9hY2hlcyB0byBjb25zdHJ1Y3Rpbmcgc2NhbGVzIGZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCB0byB5aWVsZCByYXRoZXIgZGlmZmVyZW50IHJlc3VsdHMgaW4gdGhpcyBhZ2UgZ3JvdXAuCgpUaGUgcmVhZGVyIHNob3VsZCBub3RlIHRoYXQgdGhpcyBpcyBmYXIgZnJvbSB0aGUgb25seSB3YXkgdG8gYXBwcm9hY2ggInNjb3JpbmciIHBhcnRpY2lwYW50cyBvbiB0aGVzZSBjb25jZXB0dWFsIHVuaXRzLiBJbiBwYXJ0aWN1bGFyLCBJIGNvdWxkIGhhdmUgZXhhbWluZWQgZmFjdG9yIHNjb3Jlc+KAlHN1bW1hcmllcyBvZiBlYWNoIGZhY3RvciAoY29uY2VwdHVhbCB1bml0KSBiYXNlZCBvbiBhIHBhcnRpY2lwYW50J3MgcmVzcG9uc2VzIHRvIGFsbCBtZW50YWwgY2FwYWNpdGllcyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbGwgbWVudGFsIGNhcGFjaXRpZXMgYW5kIGFsbCBmYWN0b3JzIGluY2x1ZGVkIGluIHRoYXQgRUZBIHNvbHV0aW9u4oCUcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nICJzY2FsZXMiIGluIHRoZSB3YXkgSSBoYXZlIGp1c3Qgb3V0bGluZWQuIEhvd2V2ZXIsIG11Y2ggbGlrZSBfel8tc2NvcmVzLCBmYWN0b3Igc2NvcmVzIGluZGljYXRlIHdoZXJlIGEgcGFydGljaXBhbnQgZmFsbHMgaW4gcmVsYXRpb24gdG8gb3RoZXIgcGFydGljaXBhbnRzIGluIHRoZSBzYW1wbGUsIGFuZCBkbyBub3QgcHJvdmlkZSB0aGUga2luZCBvZiBhYnNvbHV0ZSBzY29yZSB0aGF0IGlzIGtleSB0byBteSBnb2FsIGluIHRoaXMgY2hhcHRlciwgd2hpY2ggaXMgdG8gYW5hbHl6ZSByZWxhdGlvbnNoaXBzIGFtb25nIGZhY3RvcnMgaW4gdGVybXMgb2YgdGhlIGV4dGVudCB0byB3aGljaCBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBpbmRpY2F0ZWQgdGhhdCB0YXJnZXQgY2hhcmFjdGVycyAicG9zc2Vzc2VkIiB0aGUgY29uY2VwdHVhbCB1bml0cyBCT0RZLCBIRUFSVCwgYW5kIE1JTkQuIFtYWCBBUFBFTkRJWCBCP10KCkV2ZW4gd2l0aGluIHRoZSAic2NhbGUiIGFwcHJvYWNoIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24sIHRoZXJlIGFyZSBtYW55IHBhcmFtZXRlcnMgb2YgdGhpcyBhbmFseXNpcyB0aGF0IEkgY291bGQgaGF2ZSBzZXQgZGlmZmVyZW50bHkuIEZvciBleGFtcGxlLCBJIGNvdWxkIGhhdmUgY29uc2lkZXJlZCBhYnNvbHV0ZSBmYWN0b3IgbG9hZGluZ3MgcmF0aGVyIHRoYW4gcmF3IGZhY3RvciBsb2FkaW5ncywgd2hpY2ggd291bGQgYWxsb3cgZm9yIG1lbnRhbCBjYXBhY2l0aWVzIHRoYXQgbG9hZGVkIGVzcGVjaWFsbHkgc3Ryb25nbHkgX25lZ2F0aXZlbHlfIG9uIGEgcGFydGljdWxhciBmYWN0b3IgdG8gY29udHJpYnV0ZSAobmVnYXRpdmVseSkgdG8gc2NvcmVzIG9uIHRoYXQgY29uY2VwdHVhbCB1bml0OyBJIGNvdWxkIGhhdmUgb21pdHRlZCB0aGUgc3RlcCBvZiBtYWtpbmcgdGhlIHNjYWxlcyBmb3IgYWxsIGZhY3RvcnMgd2l0aGluIGEgc2luZ2xlIEVGQSBzb3RsdWlvbiBlcXVhbCBsZW5ndGg7IEkgY291bGQgaGF2ZSBjaG9zZW4gdG8gdXNlIG9ubHkgdGhlIHRvcCA0IG9yIDUgbWVudGFsIGNhcGFjaXRpZXMgYWNyb3NzIGFsbCBFRkEgc29sdXRpb25zLCBvciB0byBzZXQgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIHNjYWxlOyBvciBJIGNvdWxkIGhhdmUgaW1wbGVtZW50ZWQgYWJzb2x1dGUgdGhyZXNob2xkcyBmb3IgaG93IHN0cm9uZ2x5IGEgbWVudGFsIGNhcGFjaXR5IG11c3QgbG9hZCBvbiBhIGZhY3RvciBpbiBvcmRlciB0byBjb3VudCB0b3dhcmQgdGhlIHNjb3JlIGZvciB0aGF0IGNvbmNlcHR1YWwgdW5pdCwgb3IgYWJzb2x1dGUgbGltaXRzIG9uIHRoZSBkZWdyZWUgdG8gd2hpY2ggYSBtZW50YWwgY2FwYWNpdHkgY2FuICJjcm9zcy1sb2FkIiBvbiBub24tZG9taW5hbnQgZmFjdG9ycyBhbmQgc3RpbGwgY291bnQgdG93YXJkIHRoZSBzY29yZSBmb3IgYW55IG9uZSBjb25jZXB0dWFsIHVuaXQuIFtYWCBBUFBFTkRJWCBCP10gSG93ZXZlciwgdGhlc2Uga2luZHMgb2YgZGV0YWlscyBkaWZmZXIgcXVpdGUgZHJhbWF0aWNhbGx5IGFjcm9zcyBzdHVkaWVzIGFuZCBhZ2UgZ3JvdXBzLiBGb3IgZXhhbXBsZSwgaW4gc29tZSBzYW1wbGVzIHRoZXJlIGFyZSBubyBzdHJvbmcgbmVnYXRpdmUgZmFjdG9yIGxvYWRpbmdzLCBhbmQgaW4gb3RoZXJzIHRoZXJlIGFyZTsgaWYgSSBjb25zaWRlcmVkIGFic29sdXRlIGxvYWRpbmdzIHJhdGhlciB0aGFuIHJhdyBsb2FkaW5ncywgSSBjb3VsZCBlbmQgdXAgY29tcGFyaW5nIHNjb3JlcyBmcm9tIGEgImJpcG9sYXIiIHNjYWxlIGluIG9uZSBzYW1wbGUgdG8gc2NvcmVzIGZyb20gYSAidW5pcG9sYXIiIHNjYWxlcyBpbiBhbm90aGVyIHNhbXBsZSwgbWFraW5nIHRoZSBjb21wYXJpc29uIG1vcmUgZGlmZmljdWx0IHRvIGludGVycHJldC4gTGlrZXdpc2UsIHNvbWUgRUZBIHNvbHV0aW9ucyB0ZW5kZWQgdG8gZmVhdHVyZSBnZW5lcmFsbHkgd2Vha2VyIGZhY3RvciBsb2FkaW5ncyB0aGFuIG90aGVyczsgaWYgSSB3ZXJlIHRvIGltcG9zZSBhYnNvbHV0ZSB0aHJlc2hvbGRzIGZvciB0aGUgc3RyZW5ndGggb2YgZmFjdG9yIGxvYWRpbmdzLCBJIGNvdWxkIGVuZCB1cCBjb21wYXJpbmcgc2NvcmVzIGZyb20gc2NhbGVzIG9mIHdpbGRseSBkaWZmZXJlbnQgbGVuZ3RocyBhY3Jvc3Mgc2FtcGxlcy4gSW4gbXkgdmlldywgdGhlIGFuYWx5c2lzIGRlY2lzaW9ucyBvdXRsaW5lZCBhYm92ZSBtYXhpbWl6ZSBjb21wYXJhYmlsaXR5IGFjcm9zcyBzdHVkaWVzIGFuZCBhZ2UgZ3JvdXBz4oCUdGhlIHByaW1hcnkgZ29hbCBvZiB0aGlzIGNoYXB0ZXIuIChOb3RlLCBob3dldmVyLCB0aGF0IGluIHRoZSBhbmFseXNpcyBjb2RlIGZvciB0aGlzIGNoYXB0ZXIgSSBoYXZlIGluY2x1ZGVkIGVhc3kgc2hvcnQgY3V0cyBmb3IgdGhlIGludGVyZXN0ZWQgcmVhZGVyIHRvIGV4cGxvcmUgZGlmZmVyZW50IG9wdGlvbnMgZm9yIGVhY2ggb2YgdGhlc2UgcGFyYW1ldGVycy4pCgpgYGB7cn0KIyBzZWUgIi4vc2NyaXB0cy9vcmdfcGFyYW0uUiIgZm9yIHBhcmFtZXRlciBzZXR0aW5nCmBgYAoKIyMjIFZpc3VhbGl6aW5nIHJlbGF0aW9uc2hpcHMKClhYCgpvdXRsaW5lOgoKLSBmb3IgYW55IHNhbXBsZSwgSSBoYXZlIGlkZW50aWZpZWQgcmVsZXZhbnQgY29uY2VwdHVhbCB1bml0cyAoY2hhcHRlciBJSSkgYW5kIHNjb3JlZCBlYWNoIHBhcnRpY2lwYW50J3MgZW5kb3JzZW1lbnQgb2YgZWFjaCBvZiB0aGVzZSB1bml0cyBmb3IgdGhlaXIgYXNzaWduZWQgdGFyZ2V0IGNoYXJhY3RlcihzKSAocHJldmlvdXMgc2VjdGlvbikKLSBub3csIEkgd2FudCB0byBhc3Nlc3MgdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlc2UgZW5kb3JzZW1lbnRzIAotIGJ1dCBJIGRvbid0IHJlYWxseSBrbm93IHdoYXQgdG8gZXhwZWN0LCBhbmQgdGhlc2UgcmVsYXRpb25zaGlwcyBjb3VsZCBiZSB2ZXJ5IGNvbXBsZXgKLSBzbywgc3RhcnQgd2l0aCBob2xpc3RpYywgZXhwbG9yYXRvcnkgdmlzdWFsaXphdGlvbjogc2NhdHRlcnBsb3RzIG9mIHBhaXJzIG9mIGNvbmNlcHR1YWwgdW5pdHMKCgojIyMgVGFyZ2V0aW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBhc3ltbWV0cmllcwoKWFgKCm91dGxpbmU6CgotIG5vdywgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoIHRvIG9uZSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGVzZSByZWxhdGlvbnNoaXBzOiBhc3ltbWV0cmllcwotIHJlbWluZGVyIG9mIGJhc2ljIGludHVpdGlvbjogaW4gdGhpcyBzYW1wbGUsIGRvIHBhcnRpY2lwYW50cyB0ZW5kIHRvIGVuZG9yc2UgQSB3aXRob3V0IEI/IEIgd2l0aG91dCBBPyBpcyB0aGVyZSBhbiBhc3ltbWV0cnkgaGVyZT8KLSBjb25uZWN0IHRvIHRoZSB2aXN1YWxpemF0aW9uczogYXN5bW1ldHJpZXMgb2YgcG9pbnRzIGFyb3VuZCB0aGUgeT14IGxpbmUgb2YgZXF1aXZhbGVuY2UKLSBvbmUgd2F5IHRvIGJvaWwgdGhpcyBkb3duIHRvIGEgbnVtYmVyOiBkaWZmZXJlbmNlIHNjb3JlcyAoZm9yIGVhY2ggcGFpciksIGNvbXBhcmlzb25zIHRvIDAgdmlhIGJheWVzaWFuIHJlZ3Jlc3Npb25zCi0gZm9yIGFueSBwYWlyOiBpZiAwLCBubyBldmlkZW5jZSBmb3IgaGllcmFyY2h5LiBpZiBub24temVybywgc29tZSBldmlkZW5jZS4KLSBjb21wYXJpc29ucyBhY3Jvc3MgcGFpcnM6IGZ1cnRoZXIgZnJvbSAwLCBtb3JlIGhpZXJhcmNoaWNhbC4KLSBjYXZlYXQgMTogdGhlc2UgYXJlIHBvc3QtaG9jIGFuYWx5c2VzISBidXQgc3RpbGwgdXNpbmcgY29uZmlybWF0b3J5IHN0YXRzLiAKLSBjYXZlYXQgMjogc2NvcmVzIG9mICgwLDApIHRyZWF0ZWQgc2FtZSBhcyBzY29yZXMgb2YgKDYsNiksIG9yIGFueXdoZXJlIGluIGJldHdlZW4uCgoKIyBTdHVkeSAxOiBBbiBhZHVsdCBlbmRwb2ludAoKSW4gdGhlIGNvbnRleHQgb2YgdGhpcyBkaXNzZXJ0YXRpb24sIFN0dWR5IDEgc2VydmVzIHRoZSByb2xlIG9mIGRlc2NyaWJpbmcgYSBkZXZlbG9wbWVudGFsIGVuZHBvaW50IGZvciBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZS4gSW4gdGhpcyBjaGFwdGVyLCBJIGZvY3VzIG9uIHdoYXQgdGhlc2Ugc3R1ZGllcyBjYW4gcmV2ZWFsIGFib3V0IHRoZSByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb25jZXB0dWFsIHVuaXRzIGRpc2N1c3NlZCBpbiBDaGFwdGVyIElJSS4gVGhlc2UgYW5hbHlzZXMgd2VyZSBub3QgcGFydCBvZiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgdGhlc2Ugc3R1ZGllcyAoV2Vpc21hbiBldCBhbC4sIDIwMTcpLgoKIyMgU3BlY2lhbCBub3RlcyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIGFuYWx5c2lzCgpBcyBub3RlZCBpbiBDaGFwdGVyIElJLCBpbiB0aGUgb3JpZ2luYWwgYW5hbHlzaXMgb2YgdGhlc2UgZGF0YXNldHMgcmVzcG9uc2VzIHdlcmUgcmVjb2RlZCB0byBydW4gZnJvbSAtMyB0byArMyBiZWZvcmUgYW5hbHlzZXMgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KTsgaW4gdGhpcyBkaXNzZXJ0YXRpb24sIEkgbWFpbnRhaW4gdGhlIDAtNiBjb2RpbmcgZm9yIGNvbXBhcmFiaWxpdHkgdG8gU3R1ZGllcyAyLTQuCgojIyBSZXN1bHRzCgojIyMgU3R1ZHkgMWEKCkluIFN0dWR5IDFhLCBgciBucm93KGQxYV9hZF93aWRlKWAgVVMgYWR1bHRzIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiA0MCBtZW50YWwgY2FwYWNpdGllcy4gVGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIGVpdGhlciBhIGJlZXRsZSBvciBhIHJvYm90LiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2QxYV9hZCA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kMWFfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYV9hZCkKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWFfYWQpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDFhX2FkICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuMS4KCmBgYHtyfQpkMWFfYWRfc2NvcmVkX2FkIDwtIHNjb3JlX2Z1bihkMWFfYWQsIHNjYWxlc19lZmFfd2RtX2QxYV9hZCkKYGBgCgojIyMjIFZpc3VhbGl6YXRpb24KClhYCgpgYGB7cn0KcGxvdHNfZDFhX2FkX3Njb3JlZF9hZCA8LSByZWx2aXpfZnVuKGQxYV9hZF9zY29yZWRfYWQpCmBgYAoKYGBge3J9CmZpZ19kMWFfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QxYV9hZF9zY29yZWRfYWRbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QxYV9hZF9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QxYV9hZF9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2QxYV9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kMWFfYWRfc2NvcmVkX2FkW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDFhX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2QxYV9hZF9wbG90cywgZmlnX2QxYV9hZF9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QxYV9hZF90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDFhOiBBZHVsdHMiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QxYV9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKGZpZ19kMWFfYWRfdGl0bGUsIGZpZ19kMWFfYWRfcGxvdHNfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpYWAoKYGBge3J9CmQxYV9hZF9zY29yZWRfYWRfZGlmZiA8LSBkaWZmX2Z1bihkMWFfYWRfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpwbG90X2QxYV9hZF9zY29yZWRfYWRfZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDFhX2FkX3Njb3JlZF9hZF9kaWZmKQpgYGAKCmBgYHtyfQojIHJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFhX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQxYV9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQxYV9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDFhX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFhX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWFfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFhX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQxYV9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMWFfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQxYV9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QxYV9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EKQpgYGAKCiMjIyBTdHVkeSAxYgoKU3R1ZHkgMWIgd2FzIGEgZGlyZWN0IHJlcGxpY2F0aW9uIG9mIFN0dWR5IDFhOiBgciBucm93KGQxYl9hZF93aWRlKWAgVVMgYWR1bHRzIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciAoZWl0aGVyIGEgYmVldGxlIG9yIGEgcm9ib3QpIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2QxYl9hZCA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kMWJfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYl9hZCkKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWJfYWQpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDFiX2FkICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuMS4KCmBgYHtyfQpkMWJfYWRfc2NvcmVkX2FkIDwtIHNjb3JlX2Z1bihkMWJfYWQsIHNjYWxlc19lZmFfd2RtX2QxYl9hZCkKYGBgCgojIyMjIFZpc3VhbGl6YXRpb24KClhYCgpgYGB7cn0KcGxvdHNfZDFiX2FkX3Njb3JlZF9hZCA8LSByZWx2aXpfZnVuKGQxYl9hZF9zY29yZWRfYWQpCmBgYAoKYGBge3J9CmZpZ19kMWJfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QxYl9hZF9zY29yZWRfYWRbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QxYl9hZF9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QxYl9hZF9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkIxIiwgIkIyIiwgIkIzIiksIG5jb2wgPSAzKQoKZmlnX2QxYl9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kMWJfYWRfc2NvcmVkX2FkW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDFiX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2QxYl9hZF9wbG90cywgZmlnX2QxYl9hZF9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QxYl9hZF90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDFiOiBBZHVsdHMiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QxYl9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKGZpZ19kMWJfYWRfdGl0bGUsIGZpZ19kMWJfYWRfcGxvdHNfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpYWAoKYGBge3J9CmQxYl9hZF9zY29yZWRfYWRfZGlmZiA8LSBkaWZmX2Z1bihkMWJfYWRfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpwbG90X2QxYl9hZF9zY29yZWRfYWRfZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDFiX2FkX3Njb3JlZF9hZF9kaWZmKQpgYGAKCmBgYHtyfQojIHJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFiX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQxYl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQxYl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDFiX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFiX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMWJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFiX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQxYl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMWJfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQxYl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QxYl9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EKQpgYGAKCiMjIyBTdHVkeSAxYwoKSW4gU3R1ZHkgMWMsIGByIG5yb3coZDFjX2FkX3dpZGUpLzJgIFVTIGFkdWx0cyBlYWNoIGFzc2Vzc2VkIHR3byB0YXJnZXQgY2hhcmFjdGVycyBvbiA0MCBtZW50YWwgY2FwYWNpdGllcy4gTGlrZSBTdHVkaWVzIDFhIGFuZCAxYiwgdGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaDsgYnV0IGluIHRoaXMgc3R1ZHksIGFsbCBwYXJ0aWNpcGFudHMgYXNzZXNzZWQgYm90aCBvZiB0aGVzZSB0YXJnZXQgY2hhcmFjdGVycyBzaWRlIGJ5IHNpZGUgKHdpdGggbGVmdC1yaWdodCBwb3NpdGlvbiBjb3VudGVyYmFsYW5lZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gKFNlZSBDaGFwdGVyIElJIGFuZCBXZWlzbWFuIGV0IGFsLiwgMjAxNywgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kMWNfYWQgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDFjX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWNfYWQpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFjX2FkKWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfd2RtX2QxY19hZCAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSA0LjEuCgpgYGB7cn0KZDFjX2FkX3Njb3JlZF9hZCA8LSBzY29yZV9mdW4oZDFjX2FkLCBzY2FsZXNfZWZhX3dkbV9kMWNfYWQpCmBgYAoKIyMjIyBWaXN1YWxpemF0aW9uCgpYWAoKYGBge3J9CnBsb3RzX2QxY19hZF9zY29yZWRfYWQgPC0gcmVsdml6X2Z1bihkMWNfYWRfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpmaWdfZDFjX2FkX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kMWNfYWRfc2NvcmVkX2FkW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kMWNfYWRfc2NvcmVkX2FkW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kMWNfYWRfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJDMSIsICJDMiIsICJDMyIpLCBuY29sID0gMykKCmZpZ19kMWNfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDFjX2FkX3Njb3JlZF9hZFtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpKQoKZmlnX2QxY19hZF9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kMWNfYWRfcGxvdHMsIGZpZ19kMWNfYWRfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kMWNfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAxYzogQWR1bHRzIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kMWNfYWRfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZChmaWdfZDFjX2FkX3RpdGxlLCBmaWdfZDFjX2FkX3Bsb3RzX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyBBbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKWFgKCmBgYHtyfQpkMWNfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDFjX2FkX3Njb3JlZF9hZCkKYGBgCgpgYGB7cn0KcGxvdF9kMWNfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQxY19hZF9zY29yZWRfYWRfZGlmZikKYGBgCgpgYGB7cn0KIyByX2QxY19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QxY19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQxY19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQxY19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkMWNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkMWNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2QxY19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQxY19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWNfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkMWNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkMWNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDFjX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDFjX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIFN0dWR5IDFkCgpJbiBTdHVkeSAxZCwgYHIgbnJvdyhkMWRfYWRfd2lkZSlgIFVTIGFkdWx0cyBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMuIFVubGlrZSBTdHVkaWVzIDFhLTFjLCB0aGlzIHN0dWR5IGVtcGxveWVkIHRoZSAibWFueSBjaGFyYWN0ZXJzIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgd2VyZSByYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3Mgb25lIG9mIHRoZSBmb2xsb3dpbmcgMjEgdGFyZ2V0IGNoYXJhY3RlcnM6IGFuIGFkdWx0LCBhIGNoaWxkLCBhbiBpbmZhbnQsIGEgcGVyc29uIGluIGEgcGVyc2lzdGVudCB2ZWdldGF0aXZlIHN0YXRlLCBhIGZldHVzLCBhIGNoaW1wYW56ZWUsIGFuIGVsZXBoYW50LCBhIGRvbHBoaW4sIGEgYmVhciwgYSBkb2csIGEgZ29hdCwgYSBtb3VzZSwgYSBmcm9nLCBhIGJsdWUgamF5LCBhIGZpc2gsIGEgYmVldGxlLCBhIG1pY3JvYmUsIGEgcm9ib3QsIGEgY29tcHV0ZXIsIGEgY2FyLCBvciBhIHN0YXBsZXIuIChTZWUgQ2hhcHRlciBJSSBhbmQgV2Vpc21hbiBldCBhbC4sIDIwMTcsIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIyMgU2NhbGUgY29uc3RydWN0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV93ZG1fZDFkX2FkIDwtIHNjYWxlX2Z1bihlZmFfd2RtX2QxZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFkX2FkKQpgYGAKCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxZF9hZClgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3dkbV9kMWRfYWQgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4xLgoKYGBge3J9CmQxZF9hZF9zY29yZWRfYWQgPC0gc2NvcmVfZnVuKGQxZF9hZCwgc2NhbGVzX2VmYV93ZG1fZDFkX2FkKQpgYGAKCiMjIyMgVmlzdWFsaXphdGlvbgoKWFgKCmBgYHtyfQpwbG90c19kMWRfYWRfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDFkX2FkX3Njb3JlZF9hZCwgY29sb3JzID0gY29sb3JzMjEpCmBgYAoKYGBge3J9CmZpZ19kMWRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QxZF9hZF9zY29yZWRfYWRbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QxZF9hZF9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QxZF9hZF9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkQxIiwgIkQyIiwgIkQzIiksIG5jb2wgPSAzKQoKZmlnX2QxZF9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kMWRfYWRfc2NvcmVkX2FkW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMjEsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA3KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMjEsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA3KSkpCgpmaWdfZDFkX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2QxZF9hZF9wbG90cywgZmlnX2QxZF9hZF9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMikpCgpmaWdfZDFkX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMWQ6IEFkdWx0cyIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDFkX2FkX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoZmlnX2QxZF9hZF90aXRsZSwgZmlnX2QxZF9hZF9wbG90c19sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMgQW5hbHlzaXMgb2YgYXN5bW1ldHJpZXMKClhYCgpgYGB7cn0KZDFkX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZfZnVuKGQxZF9hZF9zY29yZWRfYWQpCmBgYAoKYGBge3J9CnBsb3RfZDFkX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkMWRfYWRfc2NvcmVkX2FkX2RpZmYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzMjEsIHdpZCA9IDAuOSkKYGBgCgpgYGB7cn0KIyByX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxZF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MjEpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYyMSkpCgpyX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMWRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYyMSkpCgojIHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMWRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSkKCnN1bW1hcnkocl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjIxKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjIxKSkKCnJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYyMSkpCgojIHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQxZF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQxZF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MjEpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDFkX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYyMSkpCgpyX2QxZF9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMWRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYyMSkpCgojIHJfZDFkX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMWRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMWRfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyBEaXNjdXNzaW9uCgpYWAoKYGBge3J9CnNjYWxlc19zdHVkeTEgPC0gYmluZF9yb3dzKHNjYWxlc19lZmFfd2RtX2QxYV9hZCAlPiUgbXV0YXRlKHN0dWR5ID0gIlN0dWR5IDFhIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlc19lZmFfd2RtX2QxYl9hZCAlPiUgbXV0YXRlKHN0dWR5ID0gIlN0dWR5IDFiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlc19lZmFfd2RtX2QxY19hZCAlPiUgbXV0YXRlKHN0dWR5ID0gIlN0dWR5IDFjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlc19lZmFfd2RtX2QxZF9hZCAlPiUgbXV0YXRlKHN0dWR5ID0gIlN0dWR5IDFkIikpICU+JQogIHNlbGVjdCgtYyhsb2FkaW5nLCBvcmRlcikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgc3ByZWFkKHN0dWR5LCBmYWN0b3IpICU+JQogIG11dGF0ZSh1cl9mYWN0b3IgPSBpZmVsc2UoIWlzLm5hKGBTdHVkeSAxYWApLCBgU3R1ZHkgMWFgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKCFpcy5uYShgU3R1ZHkgMWJgKSwgYFN0dWR5IDFiYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoIWlzLm5hKGBTdHVkeSAxY2ApLCBgU3R1ZHkgMWNgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU3R1ZHkgMWRgKSkpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDFhX2FkICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyMWEgPSBvcmRlcikpICU+JQogIGxlZnRfam9pbihzY2FsZXNfZWZhX3dkbV9kMWJfYWQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXIxYiA9IG9yZGVyKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QxY19hZCAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcjFjID0gb3JkZXIpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDFkX2FkICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyMWQgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcjFhLCBvcmRlcjFiLCBvcmRlcjFjLCBvcmRlcjFkKSAlPiUKICBzZWxlY3QoLWModXJfZmFjdG9yLCBzdGFydHNfd2l0aCgib3JkZXIiKSkpCmBgYAoKYGBge3J9CnRhYmxlNC4xIDwtIHNjYWxlc19zdHVkeTEgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWNhcGFjaXR5KSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAi4pyTIikpKSAlPiUKICByZW5hbWUoQ2FwYWNpdHkgPSBjYXBhY2l0eSkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLCAKICAgICAgICBjYXB0aW9uID0gIlRhYmxlIDQuMTogU2NhbGVzIGZvciBlYWNoIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzIChmYWN0b3JzKSBpZGVudGlmaWVkIGJ5IEVGQSBmb3IgVVMgQWR1bHRzIGluIFN0dWRpZXMgMWEtMWQgKHNlZSBDaGFwdGVyIElJSSkuIEEgY2hlY2ttYXJrIGluZGljYXRlcyB0aGF0IGEgbWVudGFsIGNhcGFjaXR5IHdhcyBpbmNsdWRlZCBpbiBhIHNjYWxlIGZvciBhIHBhcnRpY3VsYXIgc3R1ZHkuIikgJT4lICAKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQk9EWSBzY2FsZSIsIDEsIDkpICU+JQogIGdyb3VwX3Jvd3MoIkhFQVJUIHNjYWxlIiwgMTAsIDE3KSAlPiUKICBncm91cF9yb3dzKCJNSU5EIHNjYWxlIiwgMTgsIDI2KQpgYGAKCmBgYHtyIHRhYmxlNC4xLCBpbmNsdWRlID0gVH0KdGFibGU0LjEKYGBgCgpgYGB7cn0KZmlndXJlNC4xIDwtIHBsb3RfZ3JpZChmaWdfZDFhX2FkX3Bsb3RzX2xlZ190aXRsZSwgZmlnX2QxYl9hZF9wbG90c19sZWdfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2QxY19hZF9wbG90c19sZWdfdGl0bGUsIGZpZ19kMWRfYWRfcGxvdHNfbGVnX3RpdGxlLCAKICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDEsIDEsIDEuMTUpKQoKZmlndXJlNC4xX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuMSwgc3RyX3dyYXAoIkZpZ3VyZSA0LjE6IFJlbGF0aW9uc2hpcHMgYW1vbmcgVVMgYWR1bHRzJyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkaWVzIDFhLTFkLCBvcmdhbml6ZWQgYnkgc3R1ZHkgKHJvd3MpIGFuZCBwYWlyIG9mIGNvbmNlcHR1YWwgdW5pdHMgKGNvbHVtbnMpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZC4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEuOH0KZ2dkcmF3KGZpZ3VyZTQuMV9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMl9wbG90czEyMyA8LSBwbG90X2dyaWQocGxvdF9kMWFfYWRfc2NvcmVkX2FkX2RpZmYgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgMWE6IEFkdWx0cyIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfZDFiX2FkX3Njb3JlZF9hZF9kaWZmICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDFiOiBBZHVsdHMiKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfZDFjX2FkX3Njb3JlZF9hZF9kaWZmICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDFjOiBBZHVsdHMiKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMywgcmVsX3dpZHRocyA9IGMoMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gIkFVVE8iKQoKZmlndXJlNC4yX3Bsb3RzMTIzX2xlZyA8LSBwbG90X2dyaWQoZmlndXJlNC4yX3Bsb3RzMTIzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbGVnZW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfZDFhX2FkX3Njb3JlZF9hZF9kaWZmICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKCmZpZ3VyZTQuMl9wbG90czQgPC0gcGxvdF9ncmlkKHBsb3RfZDFkX2FkX3Njb3JlZF9hZF9kaWZmICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDFkOiBBZHVsdHMiKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gIkQiKQoKZmlndXJlNC4yX3Bsb3RzNF9sZWcgPC0gcGxvdF9ncmlkKGZpZ3VyZTQuMl9wbG90czQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbGVnZW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2QxZF9hZF9zY29yZWRfYWRfZGlmZiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4yKSkKCmZpZ3VyZTQuMl9wbG90cyA8LSBwbG90X2dyaWQoZmlndXJlNC4yX3Bsb3RzMTIzX2xlZywgZmlndXJlNC4yX3Bsb3RzNF9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAxLjEpKQoKZmlndXJlNC4yX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuMl9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA0LjI6IERpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gVVMgYWR1bHRzJyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkaWVzIDFhLTFkLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE0MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC44fQpnZ2RyYXcoZmlndXJlNC4yX2NhcCkKYGBgCgoKIyBTdHVkeSAyOiBDb25jZXB0dWFsIGNoYW5nZSBiZXR3ZWVuIG1pZGRsZSBjaGlsZGhvb2QgKDctOXkpIGFuZCBhZHVsdGhvb2QKCkluIFN0dWR5IDIsIGByIG5yb3coZDJfYWRfd2lkZSlgIFVTIGFkdWx0cyBhbmQgYHIgbnJvdyhkMl83OV93aWRlKWAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMilgLWByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKWAgeWVhcnMgKG1lZGlhbjogYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMilgeSkgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiBUbyBtYWtlIHRoZSBzdHVkeSBhcHByb3ByaWF0ZSBmb3IgY2hpbGRyZW4gaW4gdGhpcyBhZ2UgcmFuZ2UsIHRoZSB3b3JkaW5nIG9mIHNvbWUgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGVtcGxveWVkIGluIFN0dWR5IDEgd2FzIG1vZGlmaWVkIHRvIHVzZSBtb3JlIGFnZS1hcHByb3ByaWF0ZSB2b2NhYnVsYXJ5LCBhbmQgcGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIDMtcG9pbnQgc2NhbGUgKCJubywiIGNvZGVkIGFzIDA7ICJraW5kYSwiIGNvZGVkIGFzIDAuNSwgInllcywiIGNvZGVkIGFzIDEpLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyByYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3MgZWl0aGVyIGEgYmVldGxlIG9yIGEgcm9ib3QuIChTZWUgQ2hhcHRlciBJSSBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBTcGVjaWFsIG5vdGVzIG9uIGRhdGEgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaXMKCiMjIFJlc3VsdHMKCiMjIyBBZHVsdHMKCiMjIyMgU2NhbGUgY29uc3RydWN0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV93ZG1fZDJfYWQgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDJfYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZCkKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZClgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3dkbV9kMl9hZCAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSA0LjIuCgpgYGB7cn0KZDJfYWRfc2NvcmVkX2FkIDwtIHNjb3JlX2Z1bihkMl9hZCwgc2NhbGVzX2VmYV93ZG1fZDJfYWQpCmBgYAoKIyMjIyBWaXN1YWxpemF0aW9uCgpgYGB7cn0KcGxvdHNfZDJfYWRfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDJfYWRfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpmaWdfZDJfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QyX2FkX3Njb3JlZF9hZFtbMV1dICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDJfYWRfc2NvcmVkX2FkW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDJfYWRfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQTEiLCAiQTIiLCAiQTMiKSwgbmNvbCA9IDMpCgpmaWdfZDJfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDJfYWRfc2NvcmVkX2FkW1sxXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpKQoKZmlnX2QyX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2QyX2FkX3Bsb3RzLCBmaWdfZDJfYWRfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QyX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMjogQWR1bHRzIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kMl9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKGZpZ19kMl9hZF90aXRsZSwgZmlnX2QyX2FkX3Bsb3RzX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KZDJfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDJfYWRfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpwbG90X2QyX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkMl9hZF9zY29yZWRfYWRfZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kMl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kMl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDJfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMl9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kMl9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QyX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKWFgKCiMjIyBDaGlsZHJlbiAoNy05eSkKCiMjIyMgU2NhbGUgY29uc3RydWN0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV93ZG1fZDJfNzkgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDJfNzksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl83OSkKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl83OSlgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3dkbV9kMl83OSAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSA0LjIuCgpgYGB7cn0KZDJfNzlfc2NvcmVkX2FkIDwtIHNjb3JlX2Z1bihkMl83OSwgc2NhbGVzX2VmYV93ZG1fZDJfYWQpCmQyXzc5X3Njb3JlZF83OSA8LSBzY29yZV9mdW4oZDJfNzksIHNjYWxlc19lZmFfd2RtX2QyXzc5KQpgYGAKCiMjIyMgVmlzdWFsaXphdGlvbgoKIyMjIyMgVXNpbmcgYWR1bHRzJyBzY2FsZXMKClhYCgpgYGB7cn0KcGxvdHNfZDJfNzlfc2NvcmVkX2FkIDwtIHJlbHZpel9mdW4oZDJfNzlfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpmaWdfZDJfNzlfc2NvcmVkX2FkX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kMl83OV9zY29yZWRfYWRbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QyXzc5X3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDJfNzlfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJCMSIsICJCMiIsICJCMyIpLCBuY29sID0gMykKCmZpZ19kMl83OV9zY29yZWRfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDJfNzlfc2NvcmVkX2FkW1sxXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kMl83OV9zY29yZWRfYWRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDJfNzlfc2NvcmVkX2FkX3Bsb3RzLCBmaWdfZDJfNzlfc2NvcmVkX2FkX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QyXzc5X3Njb3JlZF9hZF90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDI6IENoaWxkcmVuLCA3LTl5IChzY29yZWQgdXNpbmcgYWR1bHRzJyBzY2FsZXMpIiwgCiAgICAgICAgICAgICBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QyXzc5X3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kMl83OV9zY29yZWRfYWRfdGl0bGUsIGZpZ19kMl83OV9zY29yZWRfYWRfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3J9CnBsb3RzX2FnZWdwX2QyX3Njb3JlZF9hZCA8LSByZWx2aXpfYWdlZ3BfZnVuKAogIGRfc2NvcmVkID0gZDJfYWRfc2NvcmVkX2FkICU+JSBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkKSwgCiAgYWdlX2dyb3VwcyA9IGMoImNoaWxkcmVuNzkiLCAiYWR1bHRzIiksCiAgYWdlX2dyb3VwX2xhYmVscyA9IGMoIkNoaWxkcmVuICg3LTl5KSIsICJBZHVsdHMiKSkKYGBgCgpgYGB7cn0KZmlnX2QyX2FsbF9zY29yZWRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2FnZWdwX2QyX3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19hZ2VncF9kMl9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfYWdlZ3BfZDJfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkMxIiwgIkMyIiwgIkMzIiksIG5jb2wgPSAzKQoKZmlnX2QyX2FsbF9zY29yZWRfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfYWdlZ3BfZDJfc2NvcmVkX2FkW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIG5hLnRyYW5zbGF0ZSA9IEYsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDJfYWxsX3Njb3JlZF9hZF9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kMl9hbGxfc2NvcmVkX2FkX3Bsb3RzLCBmaWdfZDJfYWxsX3Njb3JlZF9hZF9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kMl9hbGxfc2NvcmVkX2FkX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiVHJhY2tpbmcgZGV2ZWxvcG1lbnQgYmV0d2VlbiA3LTl5IGFuZCBhZHVsdGhvb2QgKHNjb3JlZCB1c2luZyBhZHVsdHMnIHNjYWxlcykiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QyX2FsbF9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDJfYWxsX3Njb3JlZF9hZF90aXRsZSwgZmlnX2QyX2FsbF9zY29yZWRfYWRfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzCgpYWAoKYGBge3J9CnBsb3RzX2QyXzc5X3Njb3JlZF83OSA8LSByZWx2aXpfZnVuKGQyXzc5X3Njb3JlZF83OSkKYGBgCgpgYGB7cn0KZmlnX2QyXzc5X3Njb3JlZF83OV9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDJfNzlfc2NvcmVkXzc5W1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kMl83OV9zY29yZWRfNzlbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QyXzc5X3Njb3JlZF83OVtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQTEiLCAiQTIiLCAiQTMiKSwgbmNvbCA9IDMpCgpmaWdfZDJfNzlfc2NvcmVkXzc5X2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QyXzc5X3Njb3JlZF83OVtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kMl83OV9zY29yZWRfNzlfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDJfNzlfc2NvcmVkXzc5X3Bsb3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlnX2QyXzc5X3Njb3JlZF83OV9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QyXzc5X3Njb3JlZF83OV90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDI6IENoaWxkcmVuLCA3LTl5IChzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcykiLCAKICAgICAgICAgICAgIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDJfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoCiAgZmlnX2QyXzc5X3Njb3JlZF83OV90aXRsZSwgZmlnX2QyXzc5X3Njb3JlZF83OV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgojIyMjIyBVc2luZyBhZHVsdHMnIHNjYWxlcwoKYGBge3J9CmQyXzc5X3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZfZnVuKGQyXzc5X3Njb3JlZF9hZCkKYGBgCgpgYGB7cn0KcGxvdF9kMl83OV9zY29yZWRfYWRfZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYsIGNvbG9yczAyKQpgYGAKCmBgYHtyfQojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMl83OV9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kMl83OV9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMl83OV9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSkKCnN1bW1hcnkocl9kMl83OV9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QyXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMl83OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDJfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMl83OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kMl83OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kMl83OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMl83OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EKQpgYGAKClhYCgojIyMjIyMgRGV2ZWxvcG1lbnRhbCBjb21wYXJpc29uCgpgYGB7cn0KIyByX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQyXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UsCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQyXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UsCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSkKCnJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlX2dyb3VwLAogIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUgCiAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQogICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlLAogICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTJfYWdlZ3ApKQoKIyByX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSkKCnN1bW1hcnkocl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkMl9hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQyXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSwKIyAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTJfYWdlZ3ApLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkMl83OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UsCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSkKCnJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKiBhZ2VfZ3JvdXAsCiAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSAKICAgIGZ1bGxfam9pbihkMl83OV9zY29yZWRfYWRfZGlmZikgJT4lCiAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSwKICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0yX2FnZWdwKSkKCiMgcl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTJfYWdlZ3ApKQoKc3VtbWFyeShyX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSwKIyAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTJfYWdlZ3ApLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDJfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSwKIyAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTJfYWdlZ3ApKQoKcl9kMl9hZDc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKiBhZ2VfZ3JvdXAsCiAgZGF0YSA9IGQyX2FkX3Njb3JlZF9hZF9kaWZmICU+JSAKICAgIGZ1bGxfam9pbihkMl83OV9zY29yZWRfYWRfZGlmZikgJT4lCiAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UsCiAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtMl9hZ2VncCkpCgojIHJfZDJfYWQ3OV9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEgKyBhZ2VfZ3JvdXAsCiMgICBkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiMgICAgIGZ1bGxfam9pbihkMl83OV9zY29yZWRfYWRfZGlmZikgJT4lCiMgICAgIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTJfYWdlZ3ApKQoKc3VtbWFyeShyX2QyX2FkNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgpYWAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzCgpgYGB7cn0KZDJfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZl9mdW4oZDJfNzlfc2NvcmVkXzc5KQpgYGAKCmBgYHtyfQpwbG90X2QyXzc5X3Njb3JlZF83OV9kaWZmIDwtIGRpZmZwbG90X2Z1bihkMl83OV9zY29yZWRfNzlfZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kMl83OV9zY29yZWRfNzlfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kMl83OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDJfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kMl83OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDJfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkMl83OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kMl83OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kMl83OV9zY29yZWRfNzlfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2QyXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQyXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2QyXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkMl83OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QyXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKWFgKCiMjIERpc2N1c3Npb24KClhYCgpgYGB7cn0Kc2NhbGVzX3N0dWR5MiA8LSBiaW5kX3Jvd3Moc2NhbGVzX2VmYV93ZG1fZDJfYWQgJT4lIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV93ZG1fZDJfNzkgJT4lIG11dGF0ZShzdHVkeSA9ICJDaGlsZHJlbiwgNy05eSIpKSAlPiUKICBzZWxlY3QoLWMobG9hZGluZywgb3JkZXIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHNwcmVhZChzdHVkeSwgZmFjdG9yKSAlPiUKICBtdXRhdGUodXJfZmFjdG9yID0gaWZlbHNlKCFpcy5uYShgQWR1bHRzYCksIGBBZHVsdHNgLCBgQ2hpbGRyZW4sIDctOXlgKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QyX2FkICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyX2FkID0gb3JkZXIpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDJfNzkgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfNzkgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCwgb3JkZXJfNzkpICU+JQogIHNlbGVjdCgtYyh1cl9mYWN0b3IsIHN0YXJ0c193aXRoKCJvcmRlciIpKSkKYGBgCgpgYGB7cn0KdGFibGU0LjIgPC0gc2NhbGVzX3N0dWR5MiAlPiUKICBtdXRhdGVfYXQodmFycygtY2FwYWNpdHkpLAogICAgICAgICAgICBmdW5zKGlmZWxzZShpcy5uYSguKSwgIiIsICLinJMiKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5KSAlPiUKICBrYWJsZShmb3JtYXQgPSAiaHRtbCIsCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSA0LjI6IFNjYWxlcyBmb3IgZWFjaCBvZiB0aGUgY29uY2VwdHVhbCB1bml0cyAoZmFjdG9ycykgaWRlbnRpZmllZCBieSBFRkEgZm9yIFVTIEFkdWx0cyBhbmQgY2hpbGRyZW4gaW4gU3R1ZHkgMiAoc2VlIENoYXB0ZXIgSUlJKS4gQSBjaGVja21hcmsgaW5kaWNhdGVzIHRoYXQgYSBtZW50YWwgY2FwYWNpdHkgd2FzIGluY2x1ZGVkIGluIGEgc2NhbGUgZm9yIGEgcGFydGljdWxhciBzYW1wbGUuIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIkJPRFkgc2NhbGUiLCAxLCA3KSAlPiUKICBncm91cF9yb3dzKCJIRUFSVCBzY2FsZSIsIDgsIDE0KSAlPiUKICBncm91cF9yb3dzKCJNSU5EIHNjYWxlIiwgMTUsIDIzKQpgYGAKCmBgYHtyIHRhYmxlNC4yLCBpbmNsdWRlID0gVH0KdGFibGU0LjIKYGBgCgpgYGB7cn0KZmlndXJlNC4zIDwtIHBsb3RfZ3JpZChmaWdfZDJfYWRfcGxvdHNfbGVnX3RpdGxlLCAKICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDJfNzlfc2NvcmVkX2FkX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDJfYWxsX3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEpCgpmaWd1cmU0LjNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC4zLCBzdHJfd3JhcCgiRmlndXJlIDQuMzogUmVsYXRpb25zaGlwcyBhbW9uZyBVUyBhZHVsdHMnLCBvbGRlciBjaGlsZHJlbidzLCBhbmQgeW91bmdlciBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDIsIHNjb3JlZCB1c2luZyBhZHVsdHMnIEJPRFksIEhFQVJULCBhbmQgTUlORCBzY2FsZXMgKHNlZSBUYWJsZSA0LjIpLiBQbG90cyBhcmUgb3JnYW5pemVkIGJ5IHNhbXBsZSAocm93cykgYW5kIGJ5IHBhaXIgb2YgY29uY2VwdHVhbCB1bml0cyAoY29sdW1ucykuIChBKSBBZHVsdHMuIChCKSBDaGlsZHJlbiAoNy05eSBvZiBhZ2UpLCBzY29yZWQgdXNpbmcgYWR1bHRzJyBzY2FsZXMuIChDKSBBIHZpc3VhbGl6YXRpb24gb2YgZGV2ZWxvcG1lbnQgYmV0d2VlbiA3LTl5IGFuZCBhZHVsdGhvb2QsIHVzaW5nIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhbmQgYWdlIGdyb3VwLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW4gcGFuZWxzIEEtQiwgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZC4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEuNH0KZ2dkcmF3KGZpZ3VyZTQuM19jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuNCA8LSBwbG90X2dyaWQoZmlnX2QyXzc5X3Njb3JlZF83OV9wbG90c19sZWdfdGl0bGUsIAogICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxKQoKZmlndXJlNC40X2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuNCwgc3RyX3dyYXAoIkZpZ3VyZSA0LjQ6IFJlbGF0aW9uc2hpcHMgYW1vbmcgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAyLCBzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcyAoc2VlIFRhYmxlIDQuMikuIFBsb3RzIGFyZSBvcmdhbml6ZWQgYnkgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjV9CmdnZHJhdyhmaWd1cmU0LjRfY2FwKQpgYGAKCmBgYHtyfQpmaWd1cmU0LjVfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDJfYWRfc2NvcmVkX2FkX2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAyOiBBZHVsdHMiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiksCiAgcGxvdF9kMl83OV9zY29yZWRfYWRfZGlmZiArCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDI6IENoaWxkcmVuLCA3LTl5IChzY29yZWQgdXNpbmcgYWR1bHRzJyBzY2FsZXMpIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpLAogIHBsb3RfZDJfNzlfc2NvcmVkXzc5X2RpZmYgKyAKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgMjogQ2hpbGRyZW4sIDQtNnkgKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSwgCiAgbmNvbCA9IDMsIHJlbF93aWR0aHMgPSBjKDEsIDEsIDEpLAogIGxhYmVscyA9ICJBVVRPIikKCmZpZ3VyZTQuNV9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjVfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNC41OiBEaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIFVTIGFkdWx0cycgYW5kIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMi4gdGhpcyBpbmNsdWRlcyBkaWZmZXJlbmNlIHNjb3JlcyB1c2luZyBhZHVsdHMnIEJPRFksIEhFQVJULCBhbmQgTUlORCBzY2FsZXMgKHBhbmVsIEIpIGFuZCBkaWZmZXJlbmNlIHNjb3JlcyB1c2luZyBjaGlsZHJlbidzIG93biBzY2FsZXMgKHBhbmVsIEM7IHNlZSBUYWJsZSA0LjIpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE4MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMC4zOH0KZ2dkcmF3KGZpZ3VyZTQuNV9jYXApCmBgYAoKIyBTdHVkeSAzOiBDb25jZXB0dWFsIGNoYW5nZSBvdmVyIGVhcmx5IGFuZCBtaWRkbGUgY2hpbGRob29kICg0LTl5KQoKSW4gU3R1ZHkgMywgYHIgbnJvdyhkM19hZF93aWRlKWAgVVMgYWR1bHRzLCBgciBucm93KGQzXzc5X3dpZGUpYCAib2xkZXIiIGNoaWxkcmVuIChgciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMilgLWByIHN1bW1hcnkoZDNfNzkkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKWAgeWVhcnM7IG1lZGlhbjogYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMilgeSksIGFuZCBgciBucm93KGQzXzQ2X3dpZGUpYCAieW91bmdlciIgY2hpbGRyZW4gKGByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKWAtYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpYCB5ZWFyczsgbWVkaWFuOiBgciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKWB5KSBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gMjAgbWVudGFsIGNhcGFjaXRpZXMuIFRvIG1ha2UgdGhlIHN0dWR5IGFwcHJvcHJpYXRlIGZvciBjaGlsZHJlbiBpbiB0aGlzIGFnZSByYW5nZSwgcGFydGljaXBhbnRzIGFzc2Vzc2VkIGEgc3Vic2V0IG9mIHRoZSA0MCBtZW50YWwgY2FwYWNpdGllcyBlbXBsb3llZCBpbiBTdHVkeSAyLCBjaG9zZW4gdG8gcmVwcmVzZW50IHRoZSB0aHJlZSAiY29uY2VwdHVhbCB1bml0cyIgcmV2ZWFsZWQgYnkgU3R1ZGllcyAxLTIgKEJPRFksIEhFQVJULCBhbmQgTUlORCkgYW5kIHRvIGNvdmVyIGEgc2ltaWxhciByYW5nZSBvZiBtZW50YWwgY2FwYWNpdGllcyBhcyBTdHVkaWVzIDEtMi4gQXMgaW4gU3R1ZHkgMiwgcGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIDMtcG9pbnQgc2NhbGUgKCJubywiIGNvZGVkIGFzIDA7ICJraW5kYSwiIGNvZGVkIGFzIDAuNSwgInllcywiIGNvZGVkIGFzIDEpLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyByYW5kb21seSBvciBwc2V1ZG8tcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIGVpdGhlciBvbmUgb2YgdGhlIGZvbGxvd2luZyA5IGNoYXJhY3RlcnM6IGFuIGVsZXBoYW50LCBhIGdvYXQsIGEgbW91c2UsIGEgYmlyZCwgYSBiZWV0bGUsIGEgdGVkZHkgYmVhciwgYSBkb2xsLCBhIHJvYm90LCBvciBhIGNvbXB1dGVyLiAoU2VlIENoYXB0ZXIgSUkgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMgU3BlY2lhbCBub3RlcyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIGFuYWx5c2lzCgojIyBSZXN1bHRzCgojIyMgQWR1bHRzCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2QzX2FkIDwtIHNjYWxlX2Z1bihlZmFfd2RtX2QzX2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfYWQpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfYWQpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDNfYWQgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4zLgoKYGBge3J9CmQzX2FkX3Njb3JlZF9hZCA8LSBzY29yZV9mdW4oZDNfYWQsIHNjYWxlc19lZmFfd2RtX2QzX2FkKQpgYGAKCiMjIyMgVmlzdWFsaXphdGlvbgoKWFgKCmBgYHtyfQpwbG90c19kM19hZF9zY29yZWRfYWQgPC0gcmVsdml6X2Z1bihkM19hZF9zY29yZWRfYWQsIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QzX2FkX3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QzX2FkX3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QzX2FkX3Njb3JlZF9hZFtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2QzX2FkX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QzX2FkX3Njb3JlZF9hZFtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkpCgpmaWdfZDNfYWRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDNfYWRfcGxvdHMsIGZpZ19kM19hZF9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDNfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBBZHVsdHMiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QzX2FkX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoZmlnX2QzX2FkX3RpdGxlLCBmaWdfZDNfYWRfcGxvdHNfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMgQW5hbHlzaXMgb2YgYXN5bW1ldHJpZXMKClhYCgpgYGB7cn0KZDNfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDNfYWRfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpwbG90X2QzX2FkX3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkM19hZF9zY29yZWRfYWRfZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kM19hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kM19hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzX2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIENoaWxkcmVuICg3LTl5KQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kM183OSA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kM183OSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzc5KQpgYGAKCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzc5KWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfd2RtX2QzXzc5ICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuMy4KCmBgYHtyfQpkM183OV9zY29yZWRfYWQgPC0gc2NvcmVfZnVuKGQzXzc5LCBzY2FsZXNfZWZhX3dkbV9kM19hZCkKZDNfNzlfc2NvcmVkXzc5IDwtIHNjb3JlX2Z1bihkM183OSwgc2NhbGVzX2VmYV93ZG1fZDNfNzkpCmBgYAoKIyMjIyBWaXN1YWxpemF0aW9uCgojIyMjIyBVc2luZyBhZHVsdHMnIHNjYWxlcwoKWFgKCmBgYHtyfQpwbG90c19kM183OV9zY29yZWRfYWQgPC0gcmVsdml6X2Z1bihkM183OV9zY29yZWRfYWQsIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfNzlfc2NvcmVkX2FkX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kM183OV9zY29yZWRfYWRbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QzXzc5X3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNzlfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJCMSIsICJCMiIsICJCMyIpLCBuY29sID0gMykKCmZpZ19kM183OV9zY29yZWRfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDNfNzlfc2NvcmVkX2FkW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwKICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSkKCmZpZ19kM183OV9zY29yZWRfYWRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNzlfc2NvcmVkX2FkX3Bsb3RzLCBmaWdfZDNfNzlfc2NvcmVkX2FkX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QzXzc5X3Njb3JlZF9hZF90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDM6IENoaWxkcmVuLCA3LTl5IChzY29yZWQgdXNpbmcgYWR1bHRzJyBzY2FsZXMpIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kM183OV9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNzlfc2NvcmVkX2FkX3RpdGxlLCBmaWdfZDNfNzlfc2NvcmVkX2FkX3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMjIFVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcwoKWFgKCmBgYHtyfQpwbG90c19kM183OV9zY29yZWRfNzkgPC0gcmVsdml6X2Z1bihkM183OV9zY29yZWRfNzksIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kM183OV9zY29yZWRfNzlbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNzlfc2NvcmVkXzc5W1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJBMSIsICJBMiIsICJBMyIpLCBuY29sID0gMykKCmZpZ19kM183OV9zY29yZWRfNzlfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDNfNzlfc2NvcmVkXzc5W1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kM183OV9zY29yZWRfNzlfcGxvdHMsIGZpZ19kM183OV9zY29yZWRfNzlfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDNfNzlfc2NvcmVkXzc5X3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMzogQ2hpbGRyZW4sIDctOXkgKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzc5X3Njb3JlZF83OV90aXRsZSwgZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgojIyMjIyBVc2luZyBhZHVsdHMnIHNjYWxlcwoKWFgKCmBgYHtyfQpkM183OV9zY29yZWRfYWRfZGlmZiA8LSBkaWZmX2Z1bihkM183OV9zY29yZWRfYWQpCmBgYAoKYGBge3J9CnBsb3RfZDNfNzlfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzc5X3Njb3JlZF9hZF9kaWZmLCBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM183OV9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyMjIyBVc2luZyBjaGlsZHJlbidzIG93biBzY2FsZXMKClhYCgpgYGB7cn0KZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZl9mdW4oZDNfNzlfc2NvcmVkXzc5KQpgYGAKCmBgYHtyfQpwbG90X2QzXzc5X3Njb3JlZF83OV9kaWZmIDwtIGRpZmZwbG90X2Z1bihkM183OV9zY29yZWRfNzlfZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM183OV9zY29yZWRfNzlfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM183OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM183OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kM183OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kM183OV9zY29yZWRfNzlfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIENoaWxkcmVuICg0LTZ5KQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCiMjIyMjIFRocmVlLWZhY3RvciBzb2x1dGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2QzXzQ2IDwtIHNjYWxlX2Z1bihlZmFfd2RtX2QzXzQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDNfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4zLgoKIyMjIyMgVHdvLWZhY3RvciBzb2x1dGlvbgoKYGBge3J9CnNjYWxlc19lZmFfcGFyX2QzXzQ2IDwtIHNjYWxlX2Z1bihlZmFfcGFyX2QzXzQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV9wYXJfZDNfNDYpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV9wYXJfZDNfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV9wYXJfZDNfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4zLgoKYGBge3J9CmQzXzQ2X3Njb3JlZF9hZCA8LSBzY29yZV9mdW4oZDNfNDYsIHNjYWxlc19lZmFfd2RtX2QzX2FkKQpkM180Nl9zY29yZWRfNDZfd2RtIDwtIHNjb3JlX2Z1bihkM180Niwgc2NhbGVzX2VmYV93ZG1fZDNfNDYpCmQzXzQ2X3Njb3JlZF80Nl9wYXIgPC0gc2NvcmVfZnVuKGQzXzQ2LCBzY2FsZXNfZWZhX3Bhcl9kM180NikKYGBgCgojIyMjIFZpc3VhbGl6YXRpb24KCiMjIyMjIFVzaW5nIGFkdWx0cycgc2NhbGVzCgpYWAoKYGBge3J9CnBsb3RzX2QzXzQ2X3Njb3JlZF9hZCA8LSByZWx2aXpfZnVuKGQzXzQ2X3Njb3JlZF9hZCwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CmZpZ19kM180Nl9zY29yZWRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QzXzQ2X3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNDZfc2NvcmVkX2FkW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM180Nl9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkMxIiwgIkMyIiwgIkMzIiksIG5jb2wgPSAzKQoKZmlnX2QzXzQ2X3Njb3JlZF9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kM180Nl9zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkpCgpmaWdfZDNfNDZfc2NvcmVkX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzQ2X3Njb3JlZF9hZF9wbG90cywgZmlnX2QzXzQ2X3Njb3JlZF9hZF9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM180Nl9zY29yZWRfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfNDZfc2NvcmVkX2FkX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzQ2X3Njb3JlZF9hZF90aXRsZSwgZmlnX2QzXzQ2X3Njb3JlZF9hZF9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIyBVc2luZyBjaGlsZHJlbidzIG93biBzY2FsZXMgKHRocmVlLWZhY3RvciBzb2x1dGlvbikKClhYCgpgYGB7cn0KcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbSA8LSByZWx2aXpfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG0sIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM180Nl9zY29yZWRfNDZfd2RtW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl93ZG1bWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQjEiLCAiQjIiLCAiQjMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAzKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSkKCmZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHMsIGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3RpdGxlLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIyBVc2luZyBjaGlsZHJlbidzIG93biBzY2FsZXMgKHRocmVlLWZhY3RvciBzb2x1dGlvbikKClhYCgpgYGB7cn0KcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhciA8LSByZWx2aXpfZnVuKGQzXzQ2X3Njb3JlZF80Nl9wYXIsIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJDMSIpLCBuY29sID0gMykKCmZpZ19kM180Nl9zY29yZWRfNDZfcGFyX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl9wYXJbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkpCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3Bsb3RzLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtNnkgKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCAyLWZhY3RvciBzb2x1dGlvbikiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl90aXRsZSwgZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyBBbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKIyMjIyMgVXNpbmcgYWR1bHRzJyBzY2FsZXMKClhYCgpgYGB7cn0KZDNfNDZfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDNfNDZfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpwbG90X2QzXzQ2X3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkM180Nl9zY29yZWRfYWRfZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM180Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM180Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kM180Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIyMjIERldmVsb3BtZW50YWwgY29tcGFyaXNvbgoKYGBge3J9CiMgcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDksCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSwKIyAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTNfYWdlZ3ApKQoKcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZV9ncm91cCwKICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIAogICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZikgJT4lCiAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDksCiAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgojIHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCwKIyAgIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgpzdW1tYXJ5KHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5LAojICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzX2FkNzk0Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5LAojICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgpyX2QzX2FkNzk0Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKiBhZ2VfZ3JvdXAsCiAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JSAKICAgIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWRfZGlmZikgJT4lCiAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQogICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDksCiAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgojIHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTNfYWdlZ3ApKQoKc3VtbWFyeShyX2QzX2FkNzk0Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDksCiMgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGNvbnRyYXN0c19kdW0zX2FnZWdwKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgYWdlX2dyb3VwICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzX2FkX3Njb3JlZF9hZF9kaWZmICU+JQojICAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYpICU+JQojICAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSwKIyAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gY29udHJhc3RzX2R1bTNfYWdlZ3ApKQoKcl9kM19hZDc5NDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZV9ncm91cCwKICBkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIAogICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZikgJT4lCiAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDksCiAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgojIHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSArIGFnZV9ncm91cCwKIyAgIGRhdGEgPSBkM19hZF9zY29yZWRfYWRfZGlmZiAlPiUKIyAgICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZF9kaWZmKSAlPiUKIyAgICAgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChhZ2VfZ3JvdXAgPSBjb250cmFzdHNfZHVtM19hZ2VncCkpCgpzdW1tYXJ5KHJfZDNfYWQ3OTQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzICh0aHJlZS1mYWN0b3Igc29sdXRpb24pCgpYWAoKYGBge3J9CmQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiA8LSBkaWZmX2Z1bihkM180Nl9zY29yZWRfNDZfd2RtKQpgYGAKCmBgYHtyfQpwbG90X2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gSEVBUlQqIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBIRUFSVCoiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIEhFQVJUKiIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzICh0d28tZmFjdG9yIHNvbHV0aW9uKQoKWFgKCmBgYHtyfQpkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgPC0gZGlmZl9mdW4oZDNfNDZfc2NvcmVkXzQ2X3BhcikKYGBgCgpgYGB7cn0KcGxvdF9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWUhFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWS1IRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZLUhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWUhFQVJUX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFktSEVBUlQgLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFktSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EKQpgYGAKCiMjIERpc2N1c3Npb24KClhYCgpgYGB7cn0Kc2NhbGVzX3N0dWR5MyA8LSBiaW5kX3Jvd3Moc2NhbGVzX2VmYV93ZG1fZDNfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV93ZG1fZDNfNzkgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJPbGRlciBjaGlsZHJlbiwgNy05eSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXNfZWZhX3dkbV9kM180NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3R1ZHkgPSAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlc19lZmFfcGFyX2QzXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgyLWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9sZGVyIGNoaWxkcmVuLCA3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pIikpKSAlPiUKICBzcHJlYWQoc3R1ZHksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHVyX2ZhY3RvciA9IGlmZWxzZSghaXMubmEoYEFkdWx0c2ApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBZHVsdHNgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSghaXMubmEoYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBPbGRlciBjaGlsZHJlbiwgNy05eWAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCkpKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QzX2FkICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyX2FkID0gb3JkZXIpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDNfNzkgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfNzkgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCwgb3JkZXJfNzkpICU+JQogIHNlbGVjdCgtYyh1cl9mYWN0b3IsIHN0YXJ0c193aXRoKCJvcmRlciIpKSkKYGBgCgpgYGB7cn0KdGFibGU0LjMgPC0gc2NhbGVzX3N0dWR5MyAlPiUKICBtdXRhdGVfYWxsKGFzLmNoYXJhY3RlcikgJT4lCiAgIyBkZWFsIHdpdGggeW91bmdlciBjaGlsZHJlbiwgMi1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgdGVtcDIgPSBnc3ViKCJcXCoiLCAiIiwgdGVtcDEpLAogICAgICAgICB0ZW1wMyA9IGNhc2Vfd2hlbigKICAgICAgICAgICB0ZW1wMiA9PSBgQWR1bHRzYCB8IAogICAgICAgICAgICAgdGVtcDIgPT0gYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogICMgZGVhbCB3aXRoIHlvdW5nZXIgY2hpbGRyZW4sIDMtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfCAKICAgICAgICAgICAgIHRlbXAyID09IGBPbGRlciBjaGlsZHJlbiwgNy05eWAgfAogICAgICAgICAgICAgKGlzLm5hKGBBZHVsdHNgKSAmIGlzLm5hKGBPbGRlciBjaGlsZHJlbiwgNy05eWApKSB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogIG11dGF0ZV9hdCh2YXJzKGBBZHVsdHNgLCBgT2xkZXIgY2hpbGRyZW4sIDctOXlgKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAi4pyTIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiWW91bmdlciIpKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAuKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgMy1mYWN0b3Igc29sdXRpb25gID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIGAyLWZhY3RvciBzb2x1dGlvbmAgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgNC4zOiBTY2FsZXMgZm9yIGVhY2ggb2YgdGhlIGNvbmNlcHR1YWwgdW5pdHMgKGZhY3RvcnMpIGlkZW50aWZpZWQgYnkgRUZBIGZvciBVUyBBZHVsdHMsIG9sZGVyIGNoaWxkcmVuLCBhbmQgeW91bmdlciBjaGlsZHJlbiBpbiBTdHVkeSAzIChzZWUgQ2hhcHRlciBJSUkpLiBGb3IgeW91bmdlciBjaGlsZHJlbiwgdGhpcyBpbmNsdWRlcyBzY2FsZXMgZm9yIGJvdGggdGhyZWUtIGFuZCB0d28tZmFjdG9yIEVGQSBzb2x1dGlvbnMuIEEgY2hlY2ttYXJrIGluZGljYXRlcyB0aGF0IGEgbWVudGFsIGNhcGFjaXR5IHdhcyBpbmNsdWRlZCBpbiBhIHNjYWxlIGZvciBhIHBhcnRpY3VsYXIgc2FtcGxlLiBUaGUgY29uY2VwdHVhbCB1bml0cyBvZiB5b3VuZ2VyIGNoaWxkcmVuIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBzdWNoIHRoYXQgc29tZSBtZW50YWwgY2FwYWNpdGllcyB3ZXJlIGluY2x1ZGVkIGluIGRpZmZlcmVudCBzY2FsZXMgYWNyb3NzIGFnZSBncm91cHMgKGUuZy4sIGZlZWwgc2NhcmVkIHdhcyBwYXJ0IG9mIHRoZSBCT0RZIHNjYWxlIGZvciBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBidXQgcGFydCBvZiB0aGUgSEVBUlQqIHNjYWxlIGZvciB5b3VuZ2VyIGNoaWxkcmVuKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNykgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA4LCAxNCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDE1LCAyMCkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDMsCiAgICAgICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5IiA9IDIpKQpgYGAKCmBgYHtyIHRhYmxlNC4zLCBpbmNsdWRlID0gVH0KdGFibGU0LjMKYGBgCgpgYGB7cn0KcGxvdHNfYWdlZ3BfZDNfc2NvcmVkX2FkIDwtIHJlbHZpel9hZ2VncF9mdW4oCiAgZF9zY29yZWQgPSBkM19hZF9zY29yZWRfYWQgJT4lIAogICAgZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZCkgJT4lIAogICAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZCksIAogIGFnZV9ncm91cHMgPSBjKCJjaGlsZHJlbjQ2IiwgImNoaWxkcmVuNzkiLCAiYWR1bHRzIiksCiAgYWdlX2dyb3VwX2xhYmVscyA9IGMoIkNoaWxkcmVuLCAoNC02eSkiLCAiQ2hpbGRyZW4gKDctOXkpIiwgIkFkdWx0cyIpLAogIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfYWxsX3Njb3JlZF9hZF9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfYWdlZ3BfZDNfc2NvcmVkX2FkW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2FnZWdwX2QzX3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19hZ2VncF9kM19zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiRDEiLCAiRDIiLCAiRDMiKSwgbmNvbCA9IDMpCgpmaWdfZDNfYWxsX3Njb3JlZF9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19hZ2VncF9kM19zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgbmEudHJhbnNsYXRlID0gRiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSkKCmZpZ19kM19hbGxfc2NvcmVkX2FkX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QzX2FsbF9zY29yZWRfYWRfcGxvdHMsIGZpZ19kM19hbGxfc2NvcmVkX2FkX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QzX2FsbF9zY29yZWRfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJUcmFja2luZyBkZXZlbG9wbWVudCBiZXR3ZWVuIDQtOXkgYW5kIGFkdWx0aG9vZCAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfYWxsX3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM19hbGxfc2NvcmVkX2FkX3RpdGxlLCBmaWdfZDNfYWxsX3Njb3JlZF9hZF9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7cn0KZmlndXJlNC44IDwtIHBsb3RfZ3JpZChmaWdfZDNfYWRfcGxvdHNfbGVnX3RpdGxlLCAKICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDNfNzlfc2NvcmVkX2FkX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDNfNDZfc2NvcmVkX2FkX3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2QzX2FsbF9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxKQoKZmlndXJlNC44X2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuOCwgc3RyX3dyYXAoIkZpZ3VyZSA0Ljg6IFJlbGF0aW9uc2hpcHMgYW1vbmcgVVMgYWR1bHRzJywgb2xkZXIgY2hpbGRyZW4ncywgYW5kIHlvdW5nZXIgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAzLCBzY29yZWQgdXNpbmcgYWR1bHRzJyBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgc2NhbGVzIChzZWUgVGFibGUgNC4zKS4gKEEpIEFkdWx0cy4gKEIpIE9sZGVyIGNoaWxkcmVuICg3LTl5IG9mIGFnZSkuIChDKSBZb3VuZ2VyIGNoaWxkcmVuICg0LTZ5IG9mIGFnZSkuIChEKSBBIHZpc3VhbGl6YXRpb24gb2YgZGV2ZWxvcG1lbnQgYmV0d2VlbiA0LTl5IGFuZCBhZHVsdGhvb2QsIHVzaW5nIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhbmQgYWdlIGdyb3VwLiBQbG90cyBhcmUgb3JnYW5pemVkIGJ5IHNhbXBsZSAocm93cykgYW5kIGJ5IHBhaXIgb2YgY29uY2VwdHVhbCB1bml0cyAoY29sdW1ucykuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbiBwYW5lbHMgQS1DLCBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMS44fQpnZ2RyYXcoZmlndXJlNC44X2NhcCkKYGBgCgpgYGB7cn0KZmlndXJlNC45IDwtIHBsb3RfZ3JpZChmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIGZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSkKCmZpZ3VyZTQuOV9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjksIHN0cl93cmFwKCJGaWd1cmUgNC45OiBSZWxhdGlvbnNoaXBzIGFtb25nIG9sZGVyIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMywgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKHNlZSBUYWJsZSA0LjMpLiBGb3IgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpLCB0d28gc2V0cyBvZiBzY29yZXMgYXJlIHByZXNlbnRlZDogdXNpbmcgYSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChCMS1CMykgYW5kIHVzaW5nIGEgdHdvLWZhY3RvciBFRkEgc29sdXRpb24gKEMxLUMzKS4gUGxvdHMgYXJlIG9yZ2FuaXplZCBieSBzYW1wbGUgYW5kIHNjYWxlIHVzZWQgKHJvd3MpIGFuZCBieSBwYWlyIG9mIGNvbmNlcHR1YWwgdW5pdHMgKGNvbHVtbnMpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZC4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEuNH0KZ2dkcmF3KGZpZ3VyZTQuOV9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTBfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDNfYWRfc2NvcmVkX2FkX2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBBZHVsdHMiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RfZDNfNzlfc2NvcmVkX2FkX2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNy05eSAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgcGxvdF9kM180Nl9zY29yZWRfYWRfZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogIG5jb2wgPSAzLCByZWxfd2lkdGhzID0gYygxLCAxLCAxKSwKICBsYWJlbHMgPSAiQVVUTyIpCgpmaWd1cmU0LjEwX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlndXJlNC4xMF9wbG90cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9sZWdlbmQocGxvdF9kM19hZF9zY29yZWRfYWRfZGlmZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCgpmaWd1cmU0LjEwX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTQuMTBfcGxvdHNfbGVnLCBzdHJfd3JhcCgiRmlndXJlIDQuMTA6IERpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gVVMgYWR1bHRzJyBhbmQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAzLiB0aGlzIGluY2x1ZGVzIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyAocGFuZWwgQikgYW5kIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAocGFuZWwgQzsgc2VlIFRhYmxlIDQuMykuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLCBzdWNoIHRoYXQgZGlmZmVyZW5jZSBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAtMSB0byArMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIGRpZmZlcmVuY2Ugc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkIChpLmUuLCBhIGRpZmZlcmVuY2Ugc2NvcmUgb2YgMCkuIiwgMTgwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDgsIGZpZy5hc3AgPSAwLjM4fQpnZ2RyYXcoZmlndXJlNC4xMF9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTFfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDNfNzlfc2NvcmVkXzc5X2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNy05eVxuKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgcGxvdF9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgKyAKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtNnlcbihzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgcGxvdF9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgKyAKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtNnlcbihzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMi1mYWN0b3Igc29sdXRpb24pIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgbmNvbCA9IDMsIHJlbF93aWR0aHMgPSBjKDEsIDEsIDAuOCksCiAgbGFiZWxzID0gIkFVVE8iKQoKZmlndXJlNC4xMV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ3VyZTQuMTFfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbGVnZW5kKHBsb3RfZDNfNzlfc2NvcmVkXzc5X2RpZmYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjEpKQoKZmlndXJlNC4xMV9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjExX3Bsb3RzX2xlZywgc3RyX3dyYXAoIkZpZ3VyZSA0LjExOiBEaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBhbmQgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDMsIHVzaW5nIHRoZWlyIG93biBzY2FsZXMuIEZvciB5b3VuZ2VyIGNoaWxkcmVuICg0LTZ5IG9mIGFnZSksIHRoaXMgaW5jbHVkZXMgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIHRocmVlLWZhY3RvciBFRkEgc29sdXRpb24gKHBhbmVsIEIpIGFuZCBkaWZmZXJlbmNlIHNjb3JlcyB1c2luZyB0aGUgdHdvLWZhY3RvciBzb2x1dGlvbiAocGFuZWwgQzsgc2VlIFRhYmxlIDQuMykuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLCBzdWNoIHRoYXQgZGlmZmVyZW5jZSBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAtMSB0byArMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIGRpZmZlcmVuY2Ugc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkIChpLmUuLCBhIGRpZmZlcmVuY2Ugc2NvcmUgb2YgMCkuIiwgMTgwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDgsIGZpZy5hc3AgPSAwLjM4fQpnZ2RyYXcoZmlndXJlNC4xMV9jYXApCmBgYAoKCiMgU3R1ZHkgNDogQSBmb2N1cyBvbiBlYXJseSBjaGlsZGhvb2QgKDQtNXkpCgpJbiBTdHVkeSA0LCBgciBucm93KGQ0X2FkX3dpZGUpLzJgIFVTIGFkdWx0cyBhbmQgYHIgbnJvdyhkNF80Nl93aWRlKS8yYCBVUyBjaGlsZHJlbiBiZXR3ZWVuIHRoZSBhZ2VzIG9mIGByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKWAtYHIgc3VtbWFyeShkNF80NiRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKWB5KSBlYWNoIGFzc2Vzc2VkIHR3byB0YXJnZXQgY2hhcmFjdGVycyBvbiAxOCBtZW50YWwgY2FwYWNpdGllcy4gVG8gbWFrZSB0aGUgc3R1ZHkgYXBwcm9wcmlhdGUgZm9yIGNoaWxkcmVuIGluIHRoaXMgYWdlIHJhbmdlLCB0aGlzIHN0dWR5IGVtcGxveWVkIGEgbmV3IHNldCBvZiAxOCBtZW50YWwgY2FwYWNpdGllcyAoc29tZSBidXQgbm90IGFsbCBvZiB3aGljaCB3ZXJlIHVzZWQgaW4gU3R1ZGllcyAxLTMpLiBJbiBhZGRpdGlvbiwgcGFydGljaXBhbnRzIHdlcmUgcHJlc2VudGVkIHdpdGggYSBtb3JlIGNoaWxkLWZyaWVuZGx5IHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgMy1wb2ludCByZXNwb25zZSBzY2FsZSAoIm5vLCIgY29kZWQgYXMgMDsgImtpbmRhLCIgY29kZWQgYXMgMC41LCAieWVzLCIgY29kZWQgYXMgMSkuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIGFzc2Vzc2luZyBib3RoIGEgYmVldGxlIG9yIGEgcm9ib3QgaW4gc2VxdWVuY2UgKHdpdGggb3JkZXIgY291bnRlcmJhbGFuY2VkIGFjcm9zcyBwYXJ0aWNpcGFudHMpLiAoU2VlIENoYXB0ZXIgSUkgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMgU3BlY2lhbCBub3RlcyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIGFuYWx5c2lzCgojIyBSZXN1bHRzCgojIyMgQWR1bHRzCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2Q0X2FkIDwtIHNjYWxlX2Z1bihlZmFfd2RtX2Q0X2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC40LgoKYGBge3J9CmQ0X2FkX3Njb3JlZF9hZCA8LSBzY29yZV9mdW4oZDRfYWQsIHNjYWxlc19lZmFfd2RtX2Q0X2FkKQpgYGAKCiMjIyMgVmlzdWFsaXphdGlvbgoKWFgKCmBgYHtyfQpwbG90c19kNF9hZF9zY29yZWRfYWQgPC0gcmVsdml6X2Z1bihkNF9hZF9zY29yZWRfYWQsIGNvbG9ycyA9IGNvbG9yczAyKQpgYGAKCmBgYHtyfQpmaWdfZDRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2Q0X2FkX3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0X2FkX3Njb3JlZF9hZFtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0X2FkX3Njb3JlZF9hZFtbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2Q0X2FkX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2Q0X2FkX3Njb3JlZF9hZFtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kNF9hZF9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kNF9hZF9wbG90cywgZmlnX2Q0X2FkX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kNF9hZF90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDQ6IEFkdWx0cyIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDRfYWRfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZChmaWdfZDRfYWRfdGl0bGUsIGZpZ19kNF9hZF9wbG90c19sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyBBbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKWFgKCmBgYHtyfQpkNF9hZF9zY29yZWRfYWRfZGlmZiA8LSBkaWZmX2Z1bihkNF9hZF9zY29yZWRfYWQpCmBgYAoKYGBge3J9CnBsb3RfZDRfYWRfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0X2FkX3Njb3JlZF9hZF9kaWZmLCBjb2xvcnMwMikKYGBgCgpgYGB7cn0KIyByX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF9hZF9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0X2FkX3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF9hZF9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF9hZF9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0X2FkX3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDRfYWRfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyMgQ2hpbGRyZW4gKDQtNXkpCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKIyMjIyMgVGhyZWUtZmFjdG9yIHNvbHV0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV9wYXJfZDRfNDYgPC0gc2NhbGVfZnVuKGVmYV9wYXJfZDRfNDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kNF80NikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kNF80NilgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3Bhcl9kNF80NiAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSA0LjQuCgojIyMjIyBGb3VyLWZhY3RvciBzb2x1dGlvbgoKYGBge3J9CnNjYWxlc19lZmFfd2RtX2Q0XzQ2IDwtIHNjYWxlX2Z1bihlZmFfd2RtX2Q0XzQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfNDYpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDRfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC40LgoKYGBge3J9CmQ0XzQ2X3Njb3JlZF9hZCA8LSBzY29yZV9mdW4oZDRfNDYsIHNjYWxlc19lZmFfd2RtX2Q0X2FkKQpkNF80Nl9zY29yZWRfNDZfcGFyIDwtIHNjb3JlX2Z1bihkNF80Niwgc2NhbGVzX2VmYV9wYXJfZDRfNDYpCmQ0XzQ2X3Njb3JlZF80Nl93ZG0gPC0gc2NvcmVfZnVuKGQ0XzQ2LCBzY2FsZXNfZWZhX3dkbV9kNF80NikKYGBgCgojIyMjIFZpc3VhbGl6YXRpb24KCiMjIyMjIFVzaW5nIGFkdWx0cycgc2NhbGVzCgpYWAoKYGBge3J9CnBsb3RzX2Q0XzQ2X3Njb3JlZF9hZCA8LSByZWx2aXpfZnVuKGQ0XzQ2X3Njb3JlZF9hZCwgY29sb3JzID0gY29sb3JzMDIpCmBgYAoKYGBge3J9CmZpZ19kNF80Nl9zY29yZWRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2Q0XzQ2X3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkX2FkW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfYWRbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkIxIiwgIkIyIiwgIkIzIiksIG5jb2wgPSAzKQoKZmlnX2Q0XzQ2X3Njb3JlZF9hZF9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kNF80Nl9zY29yZWRfYWRbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kNF80Nl9zY29yZWRfYWRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDRfNDZfc2NvcmVkX2FkX3Bsb3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlnX2Q0XzQ2X3Njb3JlZF9hZF9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0XzQ2X3Njb3JlZF9hZF90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDQ6IENoaWxkcmVuLCA0LTV5IChzY29yZWQgdXNpbmcgYWR1bHRzJyBzY2FsZXMpIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kNF80Nl9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDRfNDZfc2NvcmVkX2FkX3RpdGxlLCBmaWdfZDRfNDZfc2NvcmVkX2FkX3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMjIFVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAodGhyZWUtZmFjdG9yIHNvbHV0aW9uKQoKWFgKCmBgYHtyfQpwbG90c19kNF80Nl9zY29yZWRfNDZfcGFyIDwtIHJlbHZpel9mdW4oZDRfNDZfc2NvcmVkXzQ2X3BhciwgY29sb3JzID0gY29sb3JzMDIpCmBgYAoKYGBge3J9CmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzIDwtIHBsb3RfZ3JpZChwbG90c19kNF80Nl9zY29yZWRfNDZfcGFyW1sxXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl9wYXJbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhcltbM11dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJBMSIsICJBMiIsICJBMyIpLCBuY29sID0gMykKCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl9wYXJbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzLCBmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNXkgKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCAzLWZhY3RvciBzb2x1dGlvbikiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl90aXRsZSwgZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzIChmb3VyLWZhY3RvciBzb2x1dGlvbikKClhYCgpgYGB7cn0KcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbSA8LSByZWx2aXpfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG0sIGNvbG9ycyA9IGNvbG9yczAyKQpgYGAKCmBgYHtyfQpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbNF1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1s1XV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzZdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQjEiLCAiQjIiLCAiQjMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkI0IiwgIkI1IiwgIkI2IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDMpCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwKICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDQ6IENoaWxkcmVuLCA0LTV5IChzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgNC1mYWN0b3Igc29sdXRpb24pIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoCiAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fdGl0bGUsIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMgQW5hbHlzaXMgb2YgYXN5bW1ldHJpZXMKCiMjIyMjIFVzaW5nIGFkdWx0cycgc2NhbGVzCgpgYGB7cn0KZDRfNDZfc2NvcmVkX2FkX2RpZmYgPC0gZGlmZl9mdW4oZDRfNDZfc2NvcmVkX2FkKQpgYGAKCmBgYHtyfQpwbG90X2Q0XzQ2X3Njb3JlZF9hZF9kaWZmIDwtIGRpZmZwbG90X2Z1bihkNF80Nl9zY29yZWRfYWRfZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSkKCnN1bW1hcnkocl9kNF80Nl9zY29yZWRfYWRfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfYWRfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkX2FkX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkX2FkX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF9hZF9kaWZmX0hFQVJUX01JTkQpCmBgYAoKWFgKCiMjIyMjIFVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyAodGhyZWUtZmFjdG9yIHNvbHV0aW9uKQoKYGBge3J9CmQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiA8LSBkaWZmX2Z1bihkNF80Nl9zY29yZWRfNDZfcGFyKQpgYGAKCmBgYHtyfQpwbG90X2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmLCBjb2xvcnMwMikKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSkKCnN1bW1hcnkocl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9IRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSkKCnN1bW1hcnkocl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCkKYGBgCgpYWAoKIyMjIyMgVXNpbmcgY2hpbGRyZW4ncyBvd24gc2NhbGVzIChmb3VyLWZhY3RvciBzb2x1dGlvbikKCmBgYHtyfQpkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZl9mdW4oZDRfNDZfc2NvcmVkXzQ2X3dkbSkKYGBgCgpgYGB7cn0KcGxvdF9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gQk9EWSAob3RoZXIpIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlciA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gQk9EWSAob3RoZXIpIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlciA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBCT0RZIChvdGhlcikiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfQk9EWW90aGVyIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBCT0RZIChvdGhlcikiKSkKCnN1bW1hcnkocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBIRUFSVCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBIRUFSVCoiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIEhFQVJUKiIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJUIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gSEVBUlQqIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZb3RoZXJfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gSEVBUlQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBNSU5EKiIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBNSU5EKiIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChvdGhlcikgLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gTUlORCoiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIE1JTkQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQqIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKWFgKCiMjIERpc2N1c3Npb24KClhYCgpgYGB7cn0Kc2NhbGVzX3N0dWR5NCA8LSBiaW5kX3Jvd3Moc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV9wYXJfZDRfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN0dWR5ID0gIkNoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV93ZG1fZDRfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN0dWR5ID0gIkNoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGlsZHJlbiwgNC01eSAoNC1mYWN0b3Igc29sdXRpb24pIikpKSAlPiUKICBzcHJlYWQoc3R1ZHksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHVyX2ZhY3RvciA9IGlmZWxzZSghaXMubmEoYEFkdWx0c2ApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBZHVsdHNgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGBDaGlsZHJlbiwgNC01eSAoMy1mYWN0b3Igc29sdXRpb24pYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBDaGlsZHJlbiwgNC01eSAoNC1mYWN0b3Igc29sdXRpb24pYCkpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfYWQgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCkgJT4lCiAgc2VsZWN0KC1jKHVyX2ZhY3Rvciwgc3RhcnRzX3dpdGgoIm9yZGVyIikpKQpgYGAKCmBgYHtyfQp0YWJsZTQuNCA8LSBzY2FsZXNfc3R1ZHk0ICU+JQogIG11dGF0ZV9hbGwoYXMuY2hhcmFjdGVyKSAlPiUKICAjIGRlYWwgd2l0aCBDaGlsZHJlbiwgNC1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgQ2hpbGRyZW4sIDQtNXkgKDQtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfiAi4pyTIiwKICAgICAgICAgICBpcy5uYSh0ZW1wMikgfiAiIiwKICAgICAgICAgICBUUlVFIH4gdGVtcDEpKSAlPiUKICBtdXRhdGUoYENoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbilgID0gdGVtcDMpICU+JQogIHNlbGVjdCgtc3RhcnRzX3dpdGgoInRlbXAiKSkgJT4lCiAgIyBkZWFsIHdpdGggQ2hpbGRyZW4sIDMtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICB0ZW1wMiA9IGdzdWIoIlxcKiIsICIiLCB0ZW1wMSksCiAgICAgICAgIHRlbXAzID0gY2FzZV93aGVuKAogICAgICAgICAgIHRlbXAyID09IGBBZHVsdHNgIH4gIuKckyIsCiAgICAgICAgICAgaXMubmEodGVtcDIpIH4gIiIsCiAgICAgICAgICAgVFJVRSB+IHRlbXAxKSkgJT4lCiAgbXV0YXRlKGBDaGlsZHJlbiwgNC01eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogIG11dGF0ZV9hdCh2YXJzKGBBZHVsdHNgKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAi4pyTIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiWW91bmdlciIpKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAuKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgMy1mYWN0b3Igc29sdXRpb25gID0gYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICBgNC1mYWN0b3Igc29sdXRpb25gID0gYENoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbilgKSAlPiUKICBrYWJsZShmb3JtYXQgPSAiaHRtbCIsCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSA0LjQ6IFNjYWxlcyBmb3IgZWFjaCBvZiB0aGUgY29uY2VwdHVhbCB1bml0cyAoZmFjdG9ycykgaWRlbnRpZmllZCBieSBFRkEgZm9yIFVTIEFkdWx0cyBhbmQgY2hpbGRyZW4gaW4gU3R1ZHkgNCAoc2VlIENoYXB0ZXIgSUlJKS4gRm9yIGNoaWxkcmVuLCB0aGlzIGluY2x1ZGVzIHNjYWxlcyBmb3IgYm90aCB0aHJlZS0gYW5kIGZvdXItZmFjdG9yIEVGQSBzb2x1dGlvbnMuIEEgY2hlY2ttYXJrIGluZGljYXRlcyB0aGF0IGEgbWVudGFsIGNhcGFjaXR5IHdhcyBpbmNsdWRlZCBpbiBhIHNjYWxlIGZvciBhIHBhcnRpY3VsYXIgc2FtcGxlLiBUaGUgY29uY2VwdHVhbCB1bml0cyBvZiB5b3VuZ2VyIGNoaWxkcmVuIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBhZHVsdHMsIHN1Y2ggdGhhdCBzb21lIG1lbnRhbCBjYXBhY2l0aWVzIHdlcmUgaW5jbHVkZWQgaW4gZGlmZmVyZW50IHNjYWxlcyBhY3Jvc3MgYWdlIGdyb3VwcyAoZS5nLiwgbG92ZSBzb21lb25lIHdhcyBwYXJ0IG9mIHRoZSBIRUFSVCBzY2FsZSBmb3IgYWR1bHRzLCBidXQgcGFydCBvZiB0aGUgTUlORCogc2NhbGUgaW4gdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIGZvciB5b3VuZ2VyIGNoaWxkcmVuKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNSkgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA2LCAxMCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDExLCAxNSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDIsCiAgICAgICAgICAgICAgICAgICAgICJDaGlsZHJlbiwgNC01eSIgPSAyKSkKYGBgCgpgYGB7ciB0YWJsZTQuNCwgaW5jbHVkZSA9IFR9CnRhYmxlNC40CmBgYAoKYGBge3J9CnBsb3RzX2FnZWdwX2Q0X3Njb3JlZF9hZCA8LSByZWx2aXpfYWdlZ3BfZnVuKAogIGRfc2NvcmVkID0gZDRfYWRfc2NvcmVkX2FkICU+JSAKICAgIGZ1bGxfam9pbihkNF80Nl9zY29yZWRfYWQpLCAKICBhZ2VfZ3JvdXBzID0gYygiY2hpbGRyZW40NiIsICJhZHVsdHMiKSwKICBhZ2VfZ3JvdXBfbGFiZWxzID0gYygiQ2hpbGRyZW4sICg0LTV5KSIsICJBZHVsdHMiKSwKICBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KZmlnX2Q0X2FsbF9zY29yZWRfYWRfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2FnZWdwX2Q0X3Njb3JlZF9hZFtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19hZ2VncF9kNF9zY29yZWRfYWRbWzJdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfYWdlZ3BfZDRfc2NvcmVkX2FkW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkQxIiwgIkQyIiwgImQ0IiksIG5jb2wgPSAzKQoKZmlnX2Q0X2FsbF9zY29yZWRfYWRfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfYWdlZ3BfZDRfc2NvcmVkX2FkW1sxXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwMiwgbmEudHJhbnNsYXRlID0gRiwgCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDRfYWxsX3Njb3JlZF9hZF9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kNF9hbGxfc2NvcmVkX2FkX3Bsb3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZ19kNF9hbGxfc2NvcmVkX2FkX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0X2FsbF9zY29yZWRfYWRfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJUcmFja2luZyBkZXZlbG9wbWVudCBiZXR3ZWVuIDQtNXkgYW5kIGFkdWx0aG9vZCAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDRfYWxsX3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF9hbGxfc2NvcmVkX2FkX3RpdGxlLCBmaWdfZDRfYWxsX3Njb3JlZF9hZF9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7cn0KZmlndXJlNC4xMiA8LSBwbG90X2dyaWQoZmlnX2Q0X2FkX3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ19kNF80Nl9zY29yZWRfYWRfcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDRfYWxsX3Njb3JlZF9hZF9wbG90c19sZWdfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxKQoKZmlndXJlNC4xMl9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjEyLCBzdHJfd3JhcCgiRmlndXJlIDQuMTI6IFJlbGF0aW9uc2hpcHMgYW1vbmcgVVMgYWR1bHRzJyBhbmQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSA0LCBzY29yZWQgdXNpbmcgYWR1bHRzJyBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgc2NhbGVzIChzZWUgVGFibGUgNC40KS4gKEEpIEFkdWx0cy4gKEIpIENoaWxkcmVuICg0LTV5IG9mIGFnZSkuIChDKSBBIHZpc3VhbGl6YXRpb24gb2YgZGV2ZWxvcG1lbnQgYmV0d2VlbiA0LTV5IGFuZCBhZHVsdGhvb2QsIHVzaW5nIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhbmQgYWdlIGdyb3VwLiBQbG90cyBhcmUgb3JnYW5pemVkIGJ5IHNhbXBsZSAocm93cykgYW5kIGJ5IHBhaXIgb2YgY29uY2VwdHVhbCB1bml0cyAoY29sdW1ucykuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbiBwYW5lbHMgQS1CLCBpbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBUaGUgZG90dGVkIGxpbmUgY29ycmVzcG9uZHMgdG8gZXF1YWwgZW5kb3JzZW1lbnRzIG9mIHRoZSB0d28gY29uY2VwdHVhbCB1bml0cyBwbG90dGVkLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMS40fQpnZ2RyYXcoZmlndXJlNC4xMl9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTMgPC0gcGxvdF9ncmlkKGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAyKSkKCmZpZ3VyZTQuMTNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC4xMywgc3RyX3dyYXAoIkZpZ3VyZSA0LjEzOiBSZWxhdGlvbnNoaXBzIGFtb25nIFVTIGFkdWx0cycsIG9sZGVyIGNoaWxkcmVuJ3MsIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMywgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgc2NhbGVzIChzZWUgVGFibGUgNC40KS4gVHR3byBzZXRzIG9mIHNjb3JlcyBhcmUgcHJlc2VudGVkOiB1c2luZyBhIHRocmVlLWZhY3RvciBFRkEgc29sdXRpb24gKEExLUEzKSBhbmQgdXNpbmcgYSBmb3VyLWZhY3RvciBFRkEgc29sdXRpb24gKEIxLUI2KS4gUGxvdHMgYXJlIG9yZ2FuaXplZCBieSBzY2FsZSB1c2VkIChyb3dzKSBhbmQgYnkgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjM1fQpnZ2RyYXcoZmlndXJlNC4xM19jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTRfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDRfYWRfc2NvcmVkX2FkX2RpZmYgKwogICAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBBZHVsdHMiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiksCiAgcGxvdF9kNF80Nl9zY29yZWRfYWRfZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIGFkdWx0cycgc2NhbGVzKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSwgCiAgbmNvbCA9IDIsIHJlbF93aWR0aHMgPSBjKDEsIDEpLAogIGxhYmVscyA9ICJBVVRPIikKCmZpZ3VyZTQuMTRfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC4xNF9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA0LjE0OiBEaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIFVTIGFkdWx0cycgYW5kIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgNC4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEsIHN1Y2ggdGhhdCBkaWZmZXJlbmNlIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIC0xIHRvICsxLiBJbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gZGlmZmVyZW5jZSBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQgKGkuZS4sIGEgZGlmZmVyZW5jZSBzY29yZSBvZiAwKS4iLCAxODApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gOCwgZmlnLmFzcCA9IDAuMzh9CmdnZHJhdyhmaWd1cmU0LjE0X2NhcCkKYGBgCgpgYGB7cn0KZmlndXJlNC4xNV9wbG90cyA8LSBwbG90X2dyaWQoCiAgcGxvdF9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgKyAKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNnkgKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCAzLWZhY3RvciBzb2x1dGlvbikiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiksIAogIHBsb3RfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICsgCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDQ6IENoaWxkcmVuLCA0LTZ5IChzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgNC1mYWN0b3Igc29sdXRpb24pIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpLCAKICBuY29sID0gMiwgcmVsX3dpZHRocyA9IGMoMSwgMiksCiAgbGFiZWxzID0gIkFVVE8iKQoKZmlndXJlNC4xNV9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjE1X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDQuMTU6IERpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDQsIHVzaW5nIHRoZWlyIG93biBzY2FsZXMuIFRoaXMgaW5jbHVkZXMgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIHRocmVlLWZhY3RvciBFRkEgc29sdXRpb24gKHBhbmVsIEEpIGFuZCBkaWZmZXJlbmNlIHNjb3JlcyB1c2luZyB0aGUgZm91ci1mYWN0b3Igc29sdXRpb24gKHBhbmVsIEI7IHNlZSBUYWJsZSA0LjQpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE4MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMC4zOH0KZ2dkcmF3KGZpZ3VyZTQuMTVfY2FwKQpgYGAKCgojIEdlbmVyYWwgZGlzY3Vzc2lvbgoKWFgKCgojIENoYXB0ZXIgY29uY2x1c2lvbgoKSW4gdGhpcyBjaGFwdGVyLCBJIGV4cGxvcmVkIGEgc2Vjb25kIGFzcGVjdCBvZiBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBhbW9uZyBVUyBjaGlsZHJlbiBhbmQgYWR1bHRzOiBUaGUgcmVsYXRpb25zaGlwcyBhbW9uZyBjb25jZXB0dWFsIHVuaXRzLiBTdHVkaWVzIDItNCBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBmb2xsb3dpbmcgdGhlb3J5OiBYWC4gCgpBcyBpbiBDaGFwdGVyIElJSSwgSSB1cmdlIHRoZSByZWFkZXIgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGlzIG5vdCB0aGUgb25seSBwb3NzaWJsZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgcGF0dGVybiBvZiByZXN1bHRzIHByZXNlbnRlZCBoZXJlOyBhZGRpdGlvbmFsIHN0dWRpZXPigJRpbiBwYXJ0aWN1bGFyLCBzdHVkaWVzIGRlc2lnbmVkIHRvIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBYWOKAlCBjb3VsZCBwcm92aWRlIGNvbnZlcmdpbmcgZXZpZGVuY2Ugb3IgY291bGQgY2hhbGxlbmdlIHRoaXMgdGhlb3JldGljYWwgaW50ZXJwcmV0YXRpb24uIEluc3RlYWQsIHRoZSBwcmltYXJ5IHJvbGUgb2YgdGhlIHJlLWFuYWx5c2lzIGRpc2N1c3NlZCBoZXJlIGhhcyBiZWVuIHRvIGluc3BpcmUgdGhlIGh5cG90aGVzaXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggYW5kIHRvIHRoZSBmb3VuZGF0aW9uIGZvciBmdXR1cmUgdGVzdHMgb2YgdGhpcyBoeXBvdGhlc2lzLCBpbiB0dXJuIHJlZmluaW5nIGEgZ2VuZXJhbCB0aGVvcnkgb2YgdGhpcyBhc3BlY3Qgb2YgY29uY2VwdHVhbCBkZXZlbG9wbWVudC4gIAoKSW4gdGhlIG5leHQgY2hhcHRlciwgSSBhcHBseSB0aGUgc2FtZSBleHBsb3JhdG9yeSBzcGlyaXQgdG8gdGhlIHRoaXJkIGFuZCBmaW5hbCBhc3BlY3Qgb2YgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmU6IHRoZSBhcHBsaWNhdGlvbiBvciBkZXBsb3ltZW50IG9mIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHMgaW4gcmVhc29uaW5nIGFib3V0IHZhcmlvdXMga2luZHMgb2YgYmVpbmdzLgo=